用 cin 检查用户整数输入会产生无限循环
Posted
技术标签:
【中文标题】用 cin 检查用户整数输入会产生无限循环【英文标题】:checking for user integer input with cin gives infinite loop 【发布时间】: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 << "Please supply...."
的无限循环,例如一个人物。我该如何解决这个问题?
【问题讨论】:
问题是,如果需要,我不确定应该将 clear() 放在哪里。 您需要在输入进入错误状态后调用它们。在您的代码中,输出在逻辑上是最正确的。 @chris 谢谢克里斯,你的评论应该是一个答案,帮助并使它工作! 答案提供的时间和我差不多 :) 我想要非常简短地解释你为什么把它放在那里。 【参考方案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') 部分,结果非常重要。以上是关于用 cin 检查用户整数输入会产生无限循环的主要内容,如果未能解决你的问题,请参考以下文章