我有以下for循环,我提示用户输入4位数的pin并按回车键。有人能给我解释一下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??
}发布于 2016-11-12 03:45:51
正如其他人所提到的,这个循环丢弃了stdin中不需要的字符,以便下一个输入函数有一个干净的流,尤其是它丢弃了用户输入的最后一个字符后面的\n。但是,如果发生读取错误,getchar()将返回EOF,因此该循环还应该测试EOF,如下所示:
int ch;
while ((ch = getchar()) != '\n' && ch != EOF)
continue; // discard unwanted characters另请注意,如果stdin已被重定向,则可以在不遇到\n的情况下到达EOF。而且,正如@chqrlie在评论中指出的那样,用户可以通过在Linux中输入Ctrl-D或在Windows中输入Ctrl-Z来从终端发出EOF信号。因此,显式测试EOF的重要性。
发布于 2016-11-12 03:12:34
下一行是丢弃用户可能已经输入的额外字符,以及用户必须输入的换行符。
因此,代码中的其他scanf/getchar方法不会受到这种虚假输入的污染。
发布于 2016-11-12 03:12:34
while循环用于检查用户何时按enter.Enter被视为'\n‘。
https://stackoverflow.com/questions/40554617
复制相似问题