C在while循环中读取输入

C reading input in while loop

在 c 中,获取

后会做什么
int c; 
while ((c = getchar()) != EOF && c != '\n');

我看到你们中的许多人都在告诉我它的 while 循环等等,为什么要这么复杂?为什么我们不能只使用我在下面给出的代码?

gets(name);
if(name == '\n'|| name == EOF) 
    gets(name);`

首先,gets 函数并不是很安全,您可能需要使用 fgets

总之,你的这段代码是用来清除缓冲区的。当您从用户输入中读取时,用户将键入的所有内容都将存储在 buffer 中,然后程序将从中读取。这就是为什么有时你需要清除缓冲区,这样你就不会读取其他你不想要的东西。

嗯,这段代码

int c; 
while ((c = getchar()) != EOF && c != '\n');

用于清除缓冲区,如@napnac 的回答所述。主要用来代替fflush (stdin);,也就是UB。但请注意,只有当输入缓冲区恰好包含以换行符结尾的数据时,这才会成功。

否则可以使用fflush (stdin);,不推荐。您还可以使用 curses 库提供的 flushinp 函数。它会丢弃用户输入但尚未被程序读取的任何提前输入