2

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

4

2 回答 2

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
  • 如果出现错误,它实际上会再次读取输入

使用以下输入在 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

于 2013-08-22T23:56:56.787 回答
1

这个循环永远不会执行:while (error = false)

它等价于while(false),因为它设置 error 等于 false 然后不执行循环。

应该说while(error == false)

正如人们指出的那样,输入不在循环内,因此在进行上述修复后您会看到一个无限循环。我认为那个时候这个错误会很明显——这个消息将永远重复。

于 2013-08-22T23:48:59.777 回答