c - 输入缓冲区刷新

标签 c eof getchar

考虑下面的代码:

#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/

相关文章:

c - 我将如何使用 EOF 结束以下代码中的输入?

c - getchar() 函数获取 Enter 作为输入

c - 为什么使用多个 "if"s 不起作用,但在 while 循环中使用 "if"s 和 "else if"s 却起作用?

c - 用 C 中的字符串替换整数

c - 在函数C编程中初始化多个数组

c - 指针和链表节点创建错误

c++ - 如果我输入 "Ctrl+Z",它会崩溃,如何解决?

c - for (gap = n/2;gap > 0;gap/= 2) 末尾没有 ";"

c - 为什么这个程序不打印在我的文件上?

python - 无法导入第三方库python3