C++ 使用getline从for循环中的流安全读取
我想在for循环中使用C++ 使用getline从for循环中的流安全读取,c++,C++,我想在for循环中使用std::getline从流中读取数据 我指的流是从std::basic\u iostream继承的类 std::string line; for(;;){ try{ std::getline( myStreamObj, line ); if( line != "" ){ std::cout << line << std::endl;
std::getline
从流中读取数据
我指的流是从std::basic\u 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;
}
}
std::字符串行;
对于(;;){
试一试{
std::getline(myStreamObj,line);
如果(行!=“”){
std::cout默认情况下,iostreams在发生错误时不会引发异常。如果要启用异常,请执行以下操作:
cout.execeptions( std::ios::badbit );
如果设置了badbit,将启用异常
要使它们都能够:
cout.execeptions( std::ios::badbit
| std::ios::eofbit
| std::ios::failbit );
引发的异常类型为:
std::ios_base::failure
它派生自std::exception
但一般来说,不使用execption更容易,而是使用以下结构:
while( std::getline( myStreamObj, line ) ) {
// process line
}
如果要通过异常捕获错误,则需要使用ios::exception进行设置。否则将不会引发异常。您可以在此处查看文档:
您还可以显式调用ios::fail()、ios::bad()或ios::eof().Docs here:谢谢你的回复!我不知道这个条件,所以它很有用。我可以再问你一个小细节吗。为什么异常在这里不是一个好的选择?@Abruzzo有很多原因-速度较慢,不容易支持恢复,需要编写更多代码来处理错误。大多数阅读你代码的人都希望异常不会出现要在这个领域使用,他们会发现代码更难理解。
while( std::getline( myStreamObj, line ) ) {
// process line
}