Есть ли какие-либо входные данные, которые могли бы привести к сбою getline в C ?

#c

#c

Вопрос:

За исключением таких входных данных, как ctrl c и т.д.

Насколько я понимаю, getline может выйти из строя только при достижении EOF, но я не очень уверен.

Комментарии:

1. cplusplus.com/reference/string/string/getline/#return

2. Все, что приводит к тому, что входной поток находится в состоянии ошибки. Это выражается в том, что устанавливается один или несколько из std::ios_base::failbit , std::ios_base::eofbit , или std::ios_base::badbit . Если ни один из них не задан, std::getline() (или std::istream названные члены s getline() ) могут привести eofbit failbit к установке или. Для получения информации о том, что означают состояния ошибок (для потоков в целом), посмотрите на en.cppreference.com/w/cpp/io/ios_base/iostate Для получения информации о том, когда std::getline() устанавливаются состояния ошибки, посмотрите на en.cppreference.com/w/cpp/string/basic_string/getline

3. @Питер С этим, я полагаю, вы могли бы вычеркнуть этот вопрос из списка вопросов, оставшихся без ответа.

4. @Yunnosch Я упустил еще кое-что. Я постараюсь расширить комментарий в ответ в ближайшее время.

Ответ №1:

Короткий ответ: все, что приводит к тому, что входной поток находится в состоянии ошибки.

«Состояние ошибки» стандартного потока (производного от std::istream ) выражается в терминах одного или нескольких из std::ios_base::failbit , std::ios_base::eofbit (связанных с концом файла), или устанавливается std::ios_base::badbit . ios_base является базовым классом — через шаблонный std::basic_ios класс — всех стандартных потоков.

Если ни одно из этих состояний ошибки не установлено, std::getline() (или функция-член std::istream named getline() ) может вызвать либо eofbit или failbit быть установлен.

И наоборот, std::getline() будет реагировать на существующие состояния ошибок и не сможет прочитать входные данные, если они установлены.

Для получения информации о том, что означают состояния ошибок (т. Е. Что вызывает их для стандартных потоков в целом), См. Материал cppreference на iostate .

Для получения информации о том, когда std::getline() устанавливаются состояния ошибки, см. Материал cppreference on std::getline() . Аналогично, для получения информации о том, когда getline() член стандартных входных потоков устанавливает состояния ошибки, см. Материал cppreference по std::basic_istream::getline() .