首页 > 解决方案 > 如何正确处理 ios::failbit

问题描述

我试图制作一个程序,该程序在输入 -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;
}

标签: c++exceptionstdin

解决方案


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

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

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


推荐阅读