我有以下 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??
}
最佳答案
正如其他人所提到的,此循环从 stdin
中丢弃不需要的字符,以便下一个输入函数具有干净的流,特别是它丢弃了后面的 \n
用户输入的最后一个字符。但是,getchar()
在发生读取错误时返回 EOF
,因此循环也应该测试 EOF
,如下所示:
int ch;
while ((ch = getchar()) != '\n' && ch != EOF)
continue; // discard unwanted characters
另请注意,如果 stdin
已被重定向,则可以在不遇到 \n
的情况下到达 EOF
。而且,正如@chqrlie 在评论中指出的那样,用户可以通过在 Linux 中输入 Ctrl-D
或 Ctrl-Z< 从终端发出
在 Windows 中。因此显式测试 EOF
信号EOF
非常重要。
关于c - while (getchar () != '\n' );,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40554617/