C++ 字符串流错误处理

标签 c++ error-handling

我正在尝试使用 ss.fail 错误处理从字符串到 int 的转换,并且在程序循环回输入后,即使我输入整数,它也会一直出错。请注意,这仅在错误句柄循环之后发生。我试过 ss.clear()、cin.ignore 等,当我输入一个整数时它仍然无限循环。我该如何正确处理这个错误?

string strNumber;       //User to input a number
stringstream ss;        //Used to convert string to int
int number;             //Used to convert a string to number and display it

bool error = false;          //Loops if there is an input error

do{
    //Prompts the user to enter a number to be stored in string
    cout << endl << "Enter an integer number: ";
    getline(cin, strNumber);

    //Converts the string number to int and loops otherwise
    ss << strNumber;
    ss >> number;

    if(ss.fail()){
        cout << "This is not an integer" << endl;
        ss.clear();
        //cin.ignore(numeric_limits<streamsize>::max(), '\n');
        error = true;
    }
    else
        error = false;

} while(error == true);

最佳答案

一旦流进入失败状态,它将一直处于失败状态,直到被clear()ed。也就是说,您需要执行以下操作:

if (ss.fail()) {
    std::cout << "This is not an integer\n";
    ss.clear();
    // ...
}

另外,并不是仅仅写入字符串流不会替换字符串流的内容!要替换字符串流的内容,您可以使用 str() 方法:

ss.str(strNumber);

或者,您可以在每次迭代中创建一个新的字符串流,但如果要创建许多流,这会相对昂贵。

关于C++ 字符串流错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27093288/

相关文章:

vb.net - 引入登录表单后未填写组合框

c++ - 如何重新调用初始化 3D vector 的构造函数

c++ - 从静态构造函数代码调用时 pthread 库失败

docker - 如何将Docker容器上的错误冒泡到主机中的 Jenkins

error-handling - 为什么在 mulesoft "on Error Propagate"中重新抛出相同的错误?

jquery - 从 Spring MVC 向 jQuery 报告错误的最佳实践

c++ - 如何在微 Controller 上运行 opencv?

c++ - 将子对象复制构造为父类型指针

c++ - C++ 中 strcpy() 中的字符串类型

loops - 错误处理问题