fgets 从提示中读取换行符

fgets reads newline character from prompt

我应该提一下,这个 确实 在不同的环境中工作:在我们的编程 class 中,我们通常使用 IDE 代码块(这很糟糕),所以我只在我的终端中使用 gcc 编译器和 vim(我在 arch 上)。直到最近我才遇到问题,当时我不得不读入一个包含空格的字符串。为此,我认为使用 fgets() 函数是个好主意,但它产生了一些问题。代码如下所示:

void addStudent() {
    struct Student student;
    printf("Name of student: ");
    fgets(student.name, 25, stdin);
}

然而,这不会提示我在 shell 中输入,它只是继续并立即读入换行符 \n。你们知道如何解决这个问题吗?

正如评论所指出的,将 scanf()fgets() 这样的函数结合起来并不好。当调用 scanf() 时,它会在输入缓冲区中留下一个换行符,然后立即由 fgets() 读取,导致它无法提示用户。