首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >while (getchar () != '\n‘);

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

Stack Overflow用户
提问于 2016-11-12 03:08:42
回答 5查看 33.2K关注 0票数 1

我有以下for循环,我提示用户输入4位数的pin并按回车键。有人能给我解释一下while循环到底在做什么吗,因为我不完全理解它。

代码语言:javascript
复制
//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??
}
EN

回答 5

Stack Overflow用户

发布于 2016-11-12 03:45:51

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

代码语言:javascript
复制
int ch;
while ((ch = getchar()) != '\n' && ch != EOF)
    continue;  // discard unwanted characters

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

票数 6
EN

Stack Overflow用户

发布于 2016-11-12 03:12:34

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

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

票数 2
EN

Stack Overflow用户

发布于 2016-11-12 03:12:34

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40554617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档