[英]Input buffer flush
考虑下面的代码:
#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 )
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
并进行打印。
您也可以使用%c
在printf
打印int
,并将类型转换为char
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.