输入缓冲区刷新
考虑以下代码:
#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
。