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
函数。它会丢弃用户输入但尚未被程序读取的任何提前输入
在 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
函数。它会丢弃用户输入但尚未被程序读取的任何提前输入