【发布时间】:2021-12-05 13:06:28
【问题描述】:
下面的程序提示用户输入一些东西。如果fgets 可以接受输入,程序将打印用户输入的内容。该程序可以工作,只是当用户在提示符下按下 Ctrld 时会发生一些奇怪的事情。当用户在提示符处按下 Ctrld 时,程序会进入一个无限循环,提示符会一遍又一遍地打印出来。为什么会这样?
#include <stdio.h>
#define BUFSIZE 512
int main(void)
{
char input_buf[BUFSIZE];
char *user_input;
while (1) {
user_input = NULL;
printf("Input: "); /* Prompt. */
if ((user_input = fgets(input_buf, BUFSIZE, stdin)) == NULL) {
printf("Invalid input. Try again.\n");
continue;
} else {
printf("User input: %s", user_input);
break;
}
}
return 0;
}
【问题讨论】:
-
当
stdin关闭时,也许continue不是最佳选择? -
while(1)是一个无限循环,如果你从不打破它 -
一旦用户输入
Control-Dfgets将永远返回NULL。然后你的程序将continue。直到1更改为另一件事,这将需要,嗯,永远...... -
@arfneto 为什么
fgets会在用户按下Ctrl-d 后永远返回NULL? -
在某些平台上关闭
stdin...control-z