【问题标题】:getchar is not waiting for user inputgetchar 不等待用户输入
【发布时间】:2016-02-11 13:39:56
【问题描述】:

第二个 getchar 函数不等待用户输入。无法弄清楚以下代码中缺少什么

char ch = 'n';
bool status = false;

printf("%s", "Some text1\n");
ch = getchar();

if ((ch == 'Y') || (ch == 'y'))
{
    status = true;
}

if(status)
{
    printf("%s", "Some text2\n");
    ch = getchar();

    if ((ch == 'Y') || (ch == 'y'))
    {
        status = eNoError;
    }
}

【问题讨论】:

  • @Jeyaram:您的链接解决了我的问题。谢谢
  • @impulse 注意:getchar() 返回一个int。所以,ch 应该是 int

标签: c getchar


【解决方案1】:

这是因为换行符。

当你第一个输入'Y'时,你实际上输入了一个类似"Y\n"的字符串。

首先getchar() 读取'Y',然后'\n' 位于缓冲区中。 所以第二个getchar() 得到了'\n' 字符。

【讨论】:

  • 好的。我需要另一个 getchar() 来获取输入吗?或者有没有更好的方法来处理这个
  • 我相信解决这个问题的最简单方法是使用scanf(" %c", &c),就像*.com/a/18627241/371970一样
  • 这个检查需要在每个 getchar.do { c = getchar(); }while(c != '\n' && c != EOF);
【解决方案2】:

我很抱歉删除了这篇文章,但我发布这个是为了以防其他人遇到这个问题并想要一个更好的答案。解决这个问题的最简单方法是在第一个 getchar 和第二个 getchar 之间刷新输入:

ch = getchar();
fflush(stdin); // can be anywhere in between the getchar() calls
ch = getchar();

希望这可以帮助某人继续前进

【讨论】: