![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Negent |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 9.12.2011 Где: Симферополь Репутация: нет Всего: нет |
Доброго времени суток!
Написал программу, которая считывает и выводит элементы массива... Всё просто, но на самом деле, мне бы чуть больше понимания, как работает кусок кода (программа рабочая). Код:
А именно, вот этот кусок:
Проверьте пожалуйста, ход рассуждений (только это, переписывать ничего не надо в коде!): 1. Ввод значения во временную переменную "value". 2. Если введённое значение не подходит, то в очереди потока в cin, выставляется флаг, имеющий значение "ложь", что даёт запуск цикла "while". (истина = не-ложь) 3. Цикл "while (!cin)" операторами в теле цикла: cin.clear() очищает очередь символов , а while (cin.get()) выполняет сброс символа новой строки столько раз, пока они там есть. Continue выполняет новую и новую итерацию, пока там ещё есть символы новой строки. Сам cin.clear () не может выполнить очистку на символы новой строки. 4. Производится считывание временной переменной "value", если оно истинно, т.е. введено корректное значение (число), то флаг в условии цикла while (!cin) равен "истина". 5. Число присваивается элементу массива. При наличии корректного ввода, происходит выполнение цикла for (), без циклов while() |
||||
|
|||||
NoviceF |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 13.3.2012 Где: Ростов-на-Дону Репутация: 2 Всего: 2 |
1. Не совсем ввод, это считывание из потока, связанного с консолью. 2. Значения из потока извлекаются вот этим оператором http://www.cplusplus.com/reference/istream...operator%3E%3E/. При неудачном чтении у объекта потока выставляются соответствующие флаги, в случае неподходящего значения failbit. У объекта потока есть свойство на основании флагов ошибок быть преобразованым к булевому значению. При выставленном failbit (в случае неудачного чтения), преобразование потока к bool даст false. 3. Здесь неправильно. cin.clear() по умолчанию сбрасывает флаги ошибок http://www.cplusplus.com/reference/ios/ios/clear/. Про символ новой строки было бы корректно сказать, что он его пропускает (извлекает из потока и игнорирует), а не сбрасывает. cin.clear() не умеет и не должен что-либо читать или извлекать из потока. Ошибки сбрасываются для того, чтобы произвести следующее чтение, т.к. если флаг ошибки останется, бессмысленно повторять чтение. 4. Нет. Если чтение прошло удачно - цикл повторять не нужно, (!cin) возвращает true в случае ошибки чтения, чтобы его повторить, если чтение прошло успешно (!cin) венёть ложь (false) и выполнение цикла прекратится. 5. Да. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |