我曾经在c ++中做过一些编程,但我暂时没有,最近又开始了。我决定写一个基本程序,看看我在哪里,就语言知识而言。我写的程序询问用户的年龄,接受输入,然后有3个选项可供选择,具体取决于用户的输入。这是我的代码
#include <iostream>
using namespace std;
int main()
{
int age;
cout << "Please enter your age\n";
cin >> age;
bool error = false;
while (error = false)
{
if (age > 105)
{
cout << "You're Too Old\n";
continue;
}
else if (age < 1)
{
cout << "You haven't been born yet!\n";
continue;
}
else
{
error = true;
continue;
}
}
cout << "Your age is: " << age << "\n";
return 0;
}
当我输入的年龄超出1-105的范围时,我的问题就出现了。出于某种原因,它会跳过整个if语句,只运行底部的代码。如果有人可以帮助我,我会很感激。
答案 0 :(得分:6)
为了正确处理错误,我建议
int age;
bool error = false;
do
{
cout << "Please enter your age\n";
error = true;
if (!(cin >> age))
{
cout << "Invalid input\n";
cin.clear();
// skip rest of line to avoid numerous spurious errors on
// non-numerical input:
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
if (!cin.good())
break;
} else if (age > 105)
{
cout << "You're Too Old\n";
}
else if (age < 1)
{
cout << "You haven't been born yet!\n";
}
else
{
error = false;
}
} while (error);
请注意
whoops
)使用以下输入查看 live on Coliru :
332
-9
0
whoops
flargle blasted furnace
22
印刷:
Please enter your age
332
You're Too Old
Please enter your age
-9
You haven't been born yet!
Please enter your age
0
You haven't been born yet!
Please enter your age
哎呀
Invalid input
Please enter your age
燃烧爆破炉
Invalid input
Please enter your age
22
Your age is: 22
答案 1 :(得分:1)
永远不会执行此循环:while (error = false)
它等同于while(false)
,因为它将错误设置为false,然后不执行循环。
应该说while(error == false)
正如人们所指出的那样,输入不在循环中,因此在进行上述修复后,您将看到无限循环。我认为那时的bug很明显 - 消息将永远重复。