关于在 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;
}