设置输入流以循环重复返回EOF

Agr*_*cus 3 c

我写了这个:

#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上的输入。

Bar*_*mar 7

当流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流的末尾,就无法添加任何内容。

  • 在您进行编辑以弄清楚您的意思之前,它可能已被否决。 (2认同)