输入缓冲区刷新

考虑以下代码:

#include 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 ) 

PS – 我在Windows和^ Z因此是EOF。

这里的问题是, char不足以保存EOF值。 您需要使用int类型。

改变char c;int c;

也就是说, getchar()将返回标准输入中的任何挂起项。 如果在输入后使用键组合,则操作类似于刷新流。 要从getchar()返回EOF ,您需要再次按下组合键。

简而言之,如果你希望getchar()CTRL + Z上返回EOF ,请确保stdin没有任何内容。

也就是说,对于托管环境, main()的正确签名至少是int main(void)

请参阅http://www.cplusplus.com/reference/cstdio/getchar/它说getchar返回类型是int 。 编译器应该发出警告。 请不要忽视此类警告。

您将int分配给char ,这将导致丢失。 尝试将其转换为int并打印出来。

你也可以在printf使用%c和类型转换为char来打印int