while(getchar()!=' \ n');

时间:2016-11-11 19:08:42

标签: c for-loop while-loop getchar

我有以下for循环,我提示用户输入一个4位数的引脚并按Enter键。有人可以向我解释while循环真正在做什么,因为我不完全理解它。

//user input for pin
for(i = 0; i < PIN_LENGTH; i++)
{
    printf("Enter digit %d of your PIN: ", i);
    user_pin[i] = getchar();
    while (getchar() != '\n'); //what is this line doing??
}

6 个答案:

答案 0 :(得分:5)

当您输入程序时,然后使用 Enter 键结束它。此密钥将作为换行符发送到您的程序。

循环的作用是在读取换行符之前读取和丢弃字符。它会刷新输入缓冲区。

如果您不这样做,那么下一个主getchar调用将返回换行符而不是您期望的数字。

答案 1 :(得分:4)

正如其他人所说,这个循环会丢弃stdin中不需要的字符,以便下一个输入函数有一个干净的流,特别是它会丢弃用户输入的最后一个字符后的\n 。但是,如果发生读取错误,getchar()会返回EOF,因此循环也应该测试EOF,如下所示:

int ch;
while ((ch = getchar()) != '\n' && ch != EOF)
    continue;  // discard unwanted characters

另请注意,如果重定向stdin,则可以在不遇到EOF的情况下到达\n。并且,正如@chqrlie在评论中指出的那样,用户可以通过在Linux中输入EOF或在Windows中输入Ctrl-D来从终端发出Ctrl-Z信号。因此,明确地测试EOF的重要性。

答案 2 :(得分:2)

下一行是丢弃用户可能输入的额外字符,以及用户 输入的换行字符。

因此,代码中的其他scanf/getchar方法不会被此虚假输入污染。

答案 3 :(得分:0)

** while循环的功能是清除用户的非法输入,例如'a','。当它得到'\ n'时,循环结束。

答案 4 :(得分:-1)

while循环用于检查用户何时按Enter键.Enter被视为'\ n'。

答案 5 :(得分:-1)

该行有一段时间,所以在运行时它会重复它直到getchar()==&#39; \ n&#39;。 &#39; \ n&#39;是一个用ASCII表示的字符&#34;输入&#34;键。通过这种方式,您可以测试用户不会按&#34;输入&#34;没有插入数字。

相关问题