#include <stdio.h>
main()
{
int c ;
while ((c = getchar()) != EOF)
{
int isEOF = (c==EOF);
printf("is %c EOF: %d ", c, isEOF);
}
}
为什么这里的每个输入字符都会调用 printf() 方法两次?
如果我输入“a”,我会得到类似的结果
E:\C_workouts>gcc CharIO.c -o CharIO.exe
E:\C_workouts>CharIO.exe
a
is a EOF: 0 is
EOF: 0
每个输入都会发生同样的情况。
因为你输入了 'a
' and '\n
'...
The '\n
' 是按下的结果[ENTER]
在终端/控制台的输入行中输入后按 键。这getchar()
函数将返回每个字符,一次一个,直到输入缓冲区被清除。所以你的循环将继续循环直到getchar()
已吃掉任何剩余的字符stdin
流缓冲区。
如果您期待stdin
调用时要清除输入缓冲区getchar()
那么你应该flush stdin
with while((ch=getchar())!='\n'&&ch!=EOF);
在调用之前消耗缓冲区中的任何先前内容getchar()
。一些实现(即许多 DOS/Windows 编译器)提供非标准fflush(stdin);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)