提问者:小点点

如何正确处理IOS::FailBit


我试图制作一个程序,它接受输入直到输入-1,并使用异常正确地处理输入。

它接受用户输入firstnameage,并打印firstname和增加1的age。如果第二个变量不是整数(年龄),那么它应该打印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;
}

共1个答案

匿名用户

尝试使用cin.ignore(),如下所示

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

必须包含头文件。