C语言 关于在fgets()中获取输入的问题



在此程序中,fgets()函数将前面的输入作为'n'的输入,因此不接受用户的任何输入。如何解决这个问题?

#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
char word[n + 1];
fgets(word, n + 1, stdin);
puts(word);

return 0;
}

scanf("%d", &n)确实止于数字后的第一个字符(如果有的话)。因此,用户输入的剩余字符(包括换行符)在stdin中保留挂起。

可以用循环清除这个结束输入。

修改后的版本:

#include <stdio.h>
int flush_input(FILE *fp) {
int c;
while ((c = getc(fp)) != EOF && c != 'n')
continue;
return c;
}
int main() {
int n;
if (scanf("%d", &n) == 1) {
flush_input(stdin);
char word[n + 1];
if (fgets(word, n + 1, stdin)) {
puts(word);  // will output an extra newline
}
}
return 0;
}

最新更新