【问题标题】:checking for user integer input with cin gives infinite loop用 cin 检查用户整数输入会产生无限循环
【发布时间】:2013-03-02 22:42:19
【问题描述】:

如果用户没有在输入提示中输入任何内容,并且他们输入的内容为零或更少,我将尝试打印错误消息。

void checkScoreInputed(int* qaltScores, int i){
    while(true){
        // cin.clear(); here?
        if ((cin >> qaltScores[i]) && (qaltScores > 0)){
            // also tried placing cin.clear() here. 
            break;} else // else is optional
        cout << "Please supply a positive number for the score: ";
    }
}

我尝试在 if 语句之前和之后放置 cin.ignore() 和 cin.clear(),但在用户输入非整数值后,我仍然得到cout &lt;&lt; "Please supply...." 的无限循环,例如一个人物。我该如何解决这个问题?

【问题讨论】:

  • 问题是,如果需要,我不确定应该将 clear() 放在哪里。
  • 您需要在输入进入错误状态后调用它们。在您的代码中,输出在逻辑上是最正确的。
  • @chris 谢谢克里斯,你的评论应该是一个答案,帮助并使它工作!
  • 答案提供的时间和我差不多 :) 我想要非常简短地解释你为什么把它放在那里。

标签: c++ error-handling user-input cin


【解决方案1】:

你忘记了

中的[i]
if ((cin >> qaltScores[i]) && (qaltScores[i] > 0))
                                         ^^^

没有它,您将检查指针的值,而不是您刚刚读取的数字。

您还需要致电cin.clear()cin.ignore()

void checkScoreInputed(int* qaltScores, int i) {
    while(true) {
        if ((cin >> qaltScores[i]) && (qaltScores[i] > 0)){
            break;
        }
        cout << "Please supply a positive number for the score: ";
        cin.clear();
        cin.ignore(10000,'\n');
    }
}

Why would we call cin.clear() and cin.ignore() after reading input?

【讨论】:

  • 哦,哎呀。谢谢。但这并没有解决我的问题。在添加 qaltScores[i] > 0 的最后一个条件之前,我也遇到了无限循环问题。
  • 我应该把它们放在 if 语句的外面还是里面?
  • 还添加了 cin.ignore(1000, '\n') 部分,结果非常重要。
猜你喜欢
  • 2013-09-14
  • 1970-01-01
  • 2020-02-15
  • 2023-03-28
  • 2013-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
相关资源
最近更新 更多