C ++中的基本年龄问答程序

时间:2013-08-22 23:46:24

标签: c++

我曾经在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语句,只运行底部的代码。如果有人可以帮助我,我会很感激。

2 个答案:

答案 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很明显 - 消息将永远重复。

相关问题