Я хочу читать из потокового использования 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
? Как к handlse эти 3 случая? Я должен сделать проверки другие пути?
Спасибо AFG
Если вы хотите фиксировать ошибки с помощью исключений, вам необходимо установить это с помощью ios :: exception. В противном случае исключение не будет создано. Вы можете ознакомиться с документацией здесь: http://www.cplusplus.com/reference/iostream/ios/exceptions/ .
Вы также можете явно вызвать ios :: fail (), ios :: bad () или ios :: eof (). Документы здесь: http://www.cplusplus.com/reference/iostream/ios/
По умолчанию iostreams не генерируют исключения при возникновении ошибок. Если вы хотите включить их:
cout.execeptions( std::ios::badbit );
включит исключения, если установлен неверный бит.
Чтобы включить их все:
cout.execeptions( std::ios::badbit
| std::ios::eofbit
| std::ios::failbit );
Выбрасываемые исключения имеют тип:
std::ios_base::failure
, который является производным от std :: exception
.
В целом, проще не использовать выполнение, а использовать такие конструкции, как:
while( std::getline( myStreamObj, line ) ) {
// process line
}