我写了这个:
#includeint main(void) { int input=0; while(input=getchar()) //TARGET printf("%d\n",input); }
我有意使用没有循环!=EOF
。我想知道在按ctrl + d之后设置了什么位,因为即使没有输入任何输入,它仍会打印-1-表示必须为使getchar()反复返回-1的流设置了一些错误位-我想知道那是什么。以及整个事情的背后是什么。
加上如何再次将流重置为正常状态。
它是Linux上的输入。
当流end-of-file
达到EOF时,将设置其标志。这是feof()
功能测试的标志。
如果您想阅读以上内容,可以使用该clearerr()
功能。这将清除错误和EOF指示器(我认为没有办法清除其中的一个)。
int main(void) { int input=0; while(input=getchar()) { //TARGET printf("%d\n",input); if (feof(stdin) || ferror(stdin)) { clearerr(stdin); } } }
请注意,在EOF之后,您是否真正可以读取任何内容取决于系统和设备。如果stdin
是终端文件或普通文件,则EOF是临时情况(用户输入后可以继续在终端上键入内容Ctl-d,并且可以将更多数据添加到文件中)。但是,一旦到达TCP流的末尾,就无法添加任何内容。