Kon*_*k16 0 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??
}
Run Code Online (Sandbox Code Playgroud)
当您为程序提供输入时,您将使用该Enter键结束它.此密钥将作为换行符发送到您的程序.
循环的作用是在读取换行符之前读取和丢弃字符.它会刷新输入缓冲区.
如果你不这样做,那么下一个主要getchar调用将返回换行而不是你期望的数字.
正如其他人所提到的,这个循环会丢弃不需要的字符,stdin以便下一个输入函数有一个干净的流,特别是它会丢弃\n用户输入的最后一个字符之后的 。但是,在读取错误的情况下getchar()返回EOF,因此循环也应该测试EOF,如下所示:
int ch;
while ((ch = getchar()) != '\n' && ch != EOF)
continue; // discard unwanted characters
Run Code Online (Sandbox Code Playgroud)
另请注意,如果stdin已被重定向,则可以在EOF不遇到\n. 而且,正如@chqrlie 在评论中指出的那样,用户可以EOF通过Ctrl-D在 Linux 或Ctrl-ZWindows 中输入来从终端发出信号。因此,EOF明确测试的重要性。