遇到 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;
}
我在 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;
}