C++字符串流错误处理

C++ stringstream error handling

本文关键字:处理 错误 字符串 C++      更新时间:2023-10-16

我正在尝试使用 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()编辑。也就是说,您需要执行以下操作:

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

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

ss.str(strNumber);

或者,您可以在每次迭代中创建新的字符串流,但如果正在创建许多流,则成本相对较高。