【问题标题】:How to handle the ios::failbit correctly如何正确处理 ios::failbit
【发布时间】:2020-12-02 14:52:22
【问题描述】:

我试图制作一个程序,在输入 -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++ exception stdin


    【解决方案1】:

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

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

    您必须包含&lt;limits&gt; 头文件。

    【讨论】:

    • 谢谢你的作品。但是有一个警告警告:通过值捕获多态类型'class std::exception' [-Wcatch-value=] catch (exception ex)
    • 您能解释一下该行的作用以及为什么将这样的 numeric_limit 与 '\n' 一起传递。谢谢
    • 试试这个 catch 语句而不是 catch(std::ios_base::failure&amp; faill)
    • 非常感谢。
    猜你喜欢
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多