考虑下面的代码:
#include<stdio.h>
int main(){
char c;
while( ( c=getchar() ) != EOF )
printf("%c\n",c);
return 0;
}
我的输入为:hi^Z
输出是:
h i (an arrow pointing towards left)
[抱歉,我找不到上述箭头的字符。 ]
有人可以解释一下输出吗?由于 ^Z 是字符串的一部分并且有要刷新的字符,我认为 ^Z 不应该被传递,因此输出应该是,
h i (new line )
P.S - 我在 Windows 上,因此 ^Z 是 EOF。
最佳答案
这里的问题是,char
不足以保存 EOF
值。您需要使用 int
类型。
将 char c;
更改为 int c;
。
也就是说,getchar()
将返回标准输入中的任何 待处理项目。如果您在某些输入后使用组合键,则操作将类似于刷新流。要获取 getchar()
返回的 EOF
,您需要再按一次组合键。
简而言之,如果您希望 getchar()
在 CTRL+Z 上返回 EOF
,请确保有stdin
中没有任何内容。
也就是说,对于托管环境,main()
的正确签名至少是 int main(void)
。
关于c - 输入缓冲区刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41136213/