关于在 fgets() 中接受输入的问题
Issues regarding taking input in 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;
}
在此程序中,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;
}