繁体   English   中英

输入缓冲区刷新

[英]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并进行打印。

您也可以使用%cprintf打印int ,并将类型转换为char

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM