如何正确处理 ios::failbit

How to handle the ios::failbit correctly

我尝试编写一个程序,在输入 -1 之前获取输入并使用异常正确处理输入。

它需要用户输入 FirstNameAge 并打印 FirstName 并将年龄增加 1。如果第二个变量不是整数(年龄),那么它应该打印 FristName0.

但是我的程序给了我意外的输出。我该如何解决这个问题?

提前致谢。

输入格式

John 12

Michel 15

Alice Graz 11

Bob 15

-1

预期输出

John 13

Michel 16

Alice 0

Bob 16

我的代码

#include <string>
#include <stdexcept>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    string inputName;
    int age;

    cin.exceptions(ios::failbit);

    cin >> inputName;
    while (inputName != "-1")
    {
        try
        {
            cin >> age;
        }
        catch (exception ex)
        {
            age = -1;
            if (cin.fail())
                cin.clear();
            cin.ignore();
        }

        cout << inputName << " " << (age + 1) << endl;

        cin >> inputName;
    }

    return 0;
}

尝试像这样使用 cin.ignore()

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

您必须包含 <limits> 头文件。