C循环读取输入

时间:2016-02-13 17:51:28

标签: c while-loop int eof getchar

在c中,这会做什么

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

我看到很多人都在告诉我它的循环和所有,为什么这么复杂呢?为什么我们不能使用下面给出的代码?

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

2 个答案:

答案 0 :(得分:1)

首先,gets功能确实不安全,您可能想要使用fgets

无论如何,您的代码片段用于清除缓冲区。当您从用户输入读取时,用户将键入的所有内容将存储在buffer中,然后程序将从中读取。这就是为什么有时候你需要清除缓冲区以便你不要阅读其他你不想要的东西。

答案 1 :(得分:0)

好吧,这段代码

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

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

否则,您可以使用fflush (stdin);,这是不推荐的。您还可以使用curses库提供的flushinp函数。它抛弃了用户输入的任何类型,并且尚未被程序读取