我怎样才能让这个重复而不被卡在无效输入上?
Posted
技术标签:
【中文标题】我怎样才能让这个重复而不被卡在无效输入上?【英文标题】:How would I get this to repeat without getting stuck on invalid input? 【发布时间】:2014-09-17 17:41:09 【问题描述】:快速提问。
如何让这段代码自行循环,以便它不断提出问题,但在给出非数字输入时仍允许执行不同的操作?
int main()
int temp = 0;
while (temp =1, 10)
int amend_numb = -1;
cout << "\nWhich amendment? ";
cin >> amend_numb;
if (amend_numb == 1)
cout << "a.\n";
if (amend_numb == 2)
cout << "b.\n";
我试图将它放入这个 while 语句中,但是如果我在 cin 中输入除整数以外的任何内容,那么它会执行一个不断重复 cout 语句的无限循环。有什么办法可以解决这个问题?
【问题讨论】:
我不太明白这个问题。你想让它永远重复,还是重复一定数量的循环 不是整数,你的意思是浮点数或字符串? @urnotsam 我希望这个问题永远重复,但是使用我现在拥有的代码,如果我不输入一个整数,那么它会进入一个无限循环,问这个问题没有休息什么的。 问题还不清楚,如果你想让它永远重复,那么它有什么问题会进入一个无限循环的提问 @Steve 我刚刚更新了代码。该程序将完全按照我的意愿运行,直到我输入除整数以外的任何内容。如果我输入“x”或“.”或“6.4”,那么它会不断地向问题发送垃圾邮件。 【参考方案1】:while (temp =1, 10)
虽然该表达式在语法上是正确的,但它可能不会按照您的想法执行:
1.将temp
分配给1。
2.忽略赋值返回的值(因为逗号操作)
3. 剩余表达式为 10,非零,所以循环继续。
一般的经验法则是使用for
循环进行已知数量的迭代:
for (temp = 1; // assignment
temp < 10; // continuation expression
++temp) // iterator incrementing
// loop content
与用户交互时,您希望循环重复直到满足退出条件。
unsigned int temp = 0;
while (temp != 0)
cout << "Enter amendment number, 0 to quit: ";
cin >> temp;
if (temp > 0)
switch (temp)
//...
有些人喜欢带有break
语句的forever 循环:
unsigned int temp = 0;
while (true)
cout << "Enter amendment number, 0 to quit: ";
cin >> temp;
if (temp == 0)
break; // terminate loop
switch(temp)
//...
【讨论】:
【参考方案2】:while (true)
//your code
简单
然后对于你的非整数输入,如果你认为用户可能没有提供预期的输入,你真的应该做一个类型转换。因为 cin 会返回一个字符串,所以你应该使用字符串来进行 int 转换,如果你的编译器支持它,比如“stoi”,或者查找 c++ 字符串到 int,我很确定你会得到一堆答案。
编辑:如果用户可能输入任何不是数字的东西,那么你最好检查错误,在强制转换之间放置一个 try 和 catch 语句,如果失败则告诉用户输入无效。
【讨论】:
c++ try and catch for just int input 看起来很难解释,你能举个小例子吗?以上是关于我怎样才能让这个重复而不被卡在无效输入上?的主要内容,如果未能解决你的问题,请参考以下文章