while(getchar()!=' ');

问题描述 投票:0回答:7

我有以下 for 循环,我提示用户输入 4 位数字 PIN 码并按 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??
}
c for-loop while-loop getchar
7个回答
7
投票

正如其他人提到的,此循环会丢弃

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
的重要性。


5
投票

当您向程序提供输入时,可以使用 Enter 键结束它。该键将作为换行符发送到您的程序。

循环的作用是读取并丢弃字符,直到读取换行符。它刷新输入缓冲区。

如果您不这样做,那么下一个主要

getchar
调用将返回换行符而不是您期望的数字。


3
投票

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

因此代码中的其他

scanf/getchar
方法不会受到此虚假输入的污染。


0
投票

在此代码中,您有一个 while 循环,它使用 getchar() 函数从标准输入(通常是键盘)读取字符。只要输入字符不等于换行符 (' ').

这是读取输入的常见方法,直到用户按下“Enter”键,这会生成换行符。一旦遇到换行符,循环就会停止。


-1
投票

while 循环用于检查用户何时按下 Enter。Enter 被视为 ' '。


-1
投票

该行需要一段时间,因此在运行时它将重复直到 getchar() == ' '。 ' ' 是一个字符,在 ASCII 中表示“输入”键。通过这种方式,您可以测试用户在没有插入数字的情况下不会按“Enter”键。


-1
投票

**这个while循环的作用是清除用户的非法输入。当输入为 ' ',循环结束。

© www.soinside.com 2019 - 2024. All rights reserved.