遇到 EOF 后,fgets 内部循环不等待输入

fgets inside loop does not wait for input after encountered EOF

我在 while 循环中使用 fgets 获取使用输入,如果我使用 ctrl-d 在行首发送 EOF,则 fgets return NULL(因为遇到 EOF),然后终端打印“!!!”,但问题是在 fgets 函数不等待输入之后,终端一直打印“ERROR”直到循环结束。我原以为 fgets 会在每个循环中等待输入。

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{

    int argNums = 0;
    while(argNums < 20){
        char argBuf[100];
        if(fgets(argBuf, 100, stdin) != NULL){
            printf("!!!");
        }else{
            printf("ERROR ");
            //exit(1);
        }
        argNums++;
    }
    return 0;
}

这是输出

1
!!!2
!!!ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR 

我想知道为什么会这样,谢谢帮助。

使用 clearerr():

The C library function void clearerr(FILE *stream) clears the end-of-file and error indicators for the given stream.

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{

    int argNums = 0;
    while(argNums < 20){
        char argBuf[100];
        if(fgets(argBuf, 100, stdin) != NULL){
            printf("!!!");
        }else{
            printf("ERROR ");
            clearerr(stdin);
            //exit(1);
        }
        argNums++;
    }
    return 0;
}