【发布时间】:2019-03-21 14:17:22
【问题描述】:
我有一个问题,如果用户输入的输入大于最大字符数,例如“abcdefg”,当最大值为 5 时,循环内的 fgets() 会运行两次,而不是“abcd”而是打印出“abcd”,然后打印出“efg”。
我认为这是因为fgets() 最多只能处理 4 个字符和一个空终止符,但标准输入缓冲区中仍然存在“efg”。
我想知道是否有一种方法可以只抓取“abcd”并丢弃超过分配缓冲区最大大小的任何剩余输入。
#define INPUT_MAX 5
int main(int argc, char* argv[]){
char input[INPUT_MAX];
while(1){
printf("prompt> ");
fgets(input, INPUT_MAX, stdin);
printf("\n%s\n", input);
}
}
示例运行:
prompt> abcdefg <-- I press enter once here for /n
abcd
prompt>
efg
prompt> . <-- I end up here after enter command
我发现fflush(stdin) 不是刷新标准输入的正确方法。
【问题讨论】:
-
for (int c; (c = getchar()) != EOF && c != '\n';);?
标签: c