cin clear c что это

Поэтому я понимаю, что фрагмент кода:

очистит буфер до 80 символов, пока он не обратится к возврату (Enter key) и не остановится. правильно?

1) Что отличает просто выполнение cin.ignore(); без параметров? Что лучше использовать в какой ситуации?

2) cin.clear(); говорит, что очищает флаги ошибок. что это значит? Какие флаги ошибок и почему вы хотите их очистить?

Флаги ошибок устанавливаются в объекте потока, когда какая-либо операция на нем прерывается. После того, как поток ошибочен, дальнейшие операции не удастся на нем, пока вы не сбросите состояние ошибки.

Вот простой пример:

Теперь поток ошибочен. Однако в нем все еще есть данные, и, возможно, стоит снова сбросить и повторить попытку:

Вместо другого извлечения вы также можете вызвать iss.ignore() после clear() , если вы знаете, что вы должны игнорировать, прежде чем имеет смысл повторить попытку.

Как правило, такой вид проб и ошибок не очень хороший подход, я нахожу. Я бы всегда использовал getline в потоке, чтобы получить полные строки. Это может произойти только в том случае, если поток исчерпан (конец файла или конец строки). Затем вы можете перейти к обработке каждой строки с помощью специальной логики синтаксического анализа, и ошибки могут быть обработаны наиболее подходящим образом. Флаги ошибок в исходном потоке слишком грубые, чтобы обеспечить элегантный дизайн потока управления.

Добрый день, мой учитель сказал, что я должен узнать, что делает функцию cin.clear () в C ++. Я искал, но нормального объяснения так и не нашел. Этот ресурс является cplusplus сказал, что эта функция

Устанавливает новое значение для флагов состояния внутренней ошибки потока. Текущее значение флагов перезаписывается: все биты заменяются битами в состоянии; Если состояние является хорошим битом (который равен нулю), все флаги ошибок очищаются.

Но я не совсем понимаю, что такое «состояние» и оттуда есть флаги и ошибки, поэтому и как хорошо мы их заменяем на 0 значение. А что такое «флаги» и зачем они нужны. И поскольку он сказал, что я должен знать, какие параметры или данные, которые принимает функция cin.clear () и возвращает, я понимаю, что она не возвращает, но она также что-то принимает? Пожалуйста помоги. Извините за плохой английский, пишу через переводчик.

Решение

Функция std::basic_ios::clear() влияет на
std::ios_base::iostate биты, которые, по большей части,
условия ошибки. Стандарт определяет «четыре» бита:

badbit Установите, если последний вход не удалось из-за аппаратного сбоя,
например ошибка чтения на диске. (На практике я не уверен, что
все реализации проверяют это; Я подозреваю, что некоторые
просто относитесь к этому как к концу файла.) failbit Установить, если последний ввод не удался по какой-либо причине, кроме
который бы установить badbit , Самый распространенный
Причины — ошибка формата (попытка прочитать int, когда
следующие символы на входе были `» abc «`) и встречали конец
файл _before_ был в состоянии прочитать достаточно данных для
запрошенный ввод. eofbit Это _не_ состояние ошибки; это будет установлено в любое время
Поток видит конец файла. Это может быть потому, что это нужно еще
другой символ для анализа ввода, в этом случае
failbit также будет установлен; но это также может быть
потому что поток ввода видел конец файла при прогнозировании.
(Для этого последнего случая рассмотрите возможность ввода int , где
оставшиеся символы в потоке «123», без запаздывания
пробелы, даже не новая строка. Чтобы знать, что у него есть
обработал все соответствующие символы, поток должен попытаться
читать символ после 3. В этом случае он устанавливает
eofbit , чтобы вспомнить, что он видел конец
файл, но он не установлен failbit потому что «123» является действительным завершенным вводом для int .) goodbit Это даже не шаблон, а просто особое значение в
который ни один из предыдущих битов не установлен.

По большей части, failbit а также eofbit имеют отношение только к
вход; вы получите (или должны получить) badbit на выходе, если диск
полный.

Доброй ночи. Вопрос от новичка. Есть программа, она что-то делает. Для чего-то она берет от пользователя данные и пишет в переменную типа int. Разумеется, при вводе чего -то отличного от целого числа она уходит в цикл. Нашел на просторах интернета неплохое решение по обработке ввода:

Все работает, вроде даже принцип понял. Но есть одно маленькое НО. По задумке при вводе «0» программа завершает работу. При любом не корректном вводе из cin извлекается 0 и управляющая конструкция успевает его скушать и завершить работу программы. 🙂 как можно выкрутиться из этой ситуации не меняя логику работы? (поставить выход на 9 вместо ноля — первое о чем я подумал).

Источник: computermaker.info

Понравилась статья? Поделиться с друзьями:
Ок! Компьютер
Добавить комментарий