我写了这个:
#include<stdio.h>
int main(void)
{
int input=0;
while(input=getchar()) //TARGET
printf("%d\n",input);
}
Run Code Online (Sandbox Code Playgroud)
我有意使用没有循环!=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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,在EOF之后,您是否真正可以读取任何内容取决于系统和设备。如果stdin是终端文件或普通文件,则EOF是临时情况(用户输入后可以继续在终端上键入内容Ctl-d,并且可以将更多数据添加到文件中)。但是,一旦到达TCP流的末尾,就无法添加任何内容。