使用try / catch处理stringstream错误

时间:2018-07-24 01:54:59

标签: c++ c++11

如何在不使用if / else的情况下处理以下异常(仅使用try / catch):-

string S;
cin >> S;
stringstream ss(S);
int n;         
try {
   ss>>n;
   if(ss.fail()) throw (exception())
   else cout<<n;
} 
catch (const exception& e) { cout << "Bad String"<<endl;}

1 个答案:

答案 0 :(得分:1)

一个流有一个exceptions成员函数来告诉它什么条件应该引发异常。在这种情况下,您只需告诉它在fail上引发异常:

#include <string>
#include <iostream>
#include <sstream>
using namespace std;

int main()
{

    string S;
    cin >> S;
    stringstream ss(S);
    ss.exceptions(ios::failbit);

    int n;
    try {
        ss>>n;
        cout<<n;
    } 
    catch (const exception& e) { 
        cout << "Bad String\n";
    }
}

这似乎起初看起来没什么用,但是如果您要这样做,这就是您的方法。

哦,停止使用using namespace std;。到处都是问题。