使用getline在for循环中从流中安全读取数据
我想在for循环中使用std::getline
从流中读取数据。
我的意思是一个从std::basic_iostream
继承的类。
std::string line; for(;;){ try{ std::getline( myStreamObj, line ); if( line != "" ){ std::cout << line << std::endl; } } catch( std::ios_base::failure& ex ){ std::cout << ex.what() << std::endl; } }
我也想检查像其他错误条件
eofbit failbit badbit
但是我对此感到困惑。
如果符合这3个标志的某些条件设置是否有任何异常抛出,如std::ios_base::failure
? 如何处理这三种情况? 我需要以其他方式进行检查吗?
谢谢AFG
如果你想通过异常捕获错误,你需要使用ios :: exception来设置它。 否则不会抛出异常。 你可以在这里查看文档:http://www.cplusplus.com/reference/iostream/ios/exceptions/。
您还可以显式调用ios :: fail(),ios :: bad()或ios :: eof()。 Docs here:http://www.cplusplus.com/reference/iostream/ios/
默认情况下,iostream在发生错误时不会抛出异常。 如果你想启用它们:
cout.execeptions( std::ios::badbit );
如果设置了badbit,会启用异常。
全部启用它们:
cout.execeptions( std::ios::badbit
| std::ios::eofbit
| std::ios::failbit );
抛出的异常类型为:
std::ios_base::failure
它来自std::exception
。
一般来说,不使用execptions更容易,但使用如下构造:
while( std::getline( myStreamObj, line ) ) {
// process line
}
链接地址: http://www.djcxy.com/p/61301.html