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()
读取,导致它无法提示用户。
我应该提一下,这个 确实 在不同的环境中工作:在我们的编程 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()
读取,导致它无法提示用户。