Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Игнорирует cin в цикле. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Международная телефонная станция http://www.cyberforum.ru/cpp-beginners/thread26942.html
Привет Всем. Вот нам задали задачку, а я не понимаю как ее решить. На международной телефонной станции картотека абонентов, содержащая сведения о телефонах и их владельцах, организована как...
C++ Создание мини теста на С люди добрые, помогите пожалуйста решить такого рода задачку на языке С: надо написать прогу, которая поочерёдно задаёт врозброс 10 вопросов(вопросы берутся не с файла). после каждого вопроса... http://www.cyberforum.ru/cpp-beginners/thread26941.html
Найти и напечатать слово, в котором содержится больше всего символов “А” C++
Дан текст, который содержит буквы и пропуски. Найти и напечатать слово, в котором содержится больше всего символов “А”. Словом считать последовательность букв, разделенных пропусками. помогите мне...
Робот в лабиринте C++
Спасибо тебе loki ты клёвый кодер! У меня есть ещё одно задание, последние которое мне надо сдать, если сможешь помоги! Написать программа на тему "Робот в лабирине".Программа должна отображать...
C++ где взять ответы из учебника Т.А.Павловская C/C++ http://www.cyberforum.ru/cpp-beginners/thread26888.html
Скажите пожалуйста где взять ответы из учебника Т.А.Павловская C/C++ или помогите решить 1 задачу к части 1. У меня есть свое решение, но неправильное.
C++ Смодулировать операцию деления двух действительных чисел в форме +/- m.n E K, где... Задание №1 Смодултровать операцию деления двух действительных чисел в форме +/- m.n E K, где сумарная длина мантиссы (m+n) - до 30 значащих цифр, а величена порядка К - до 5 цифр. Результат выдать... подробнее

Показать сообщение отдельно
Vourhey
Почетный модератор
6485 / 2259 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
22.03.2009, 02:58
По вашему обяснению он должен игнорить cin все-таки ограниченное количество раз.
По моему объяснению, ты должен сам сидеть, копаться, дизассемблировать, читать, чтобы добраться до истины. А в твоем случае, ее и копать-то не надо...
Если говорить по сути, то cin после ввода строки вообще не выполняется. Он выполняется один раз. А точнее читает поток ввода один раз. Видит, что ты напортачил с вводимыми данными и потом он уже не читает ничего из потока. То есть функция чтения даже не вызывается в иерархии оператора >>. А не вызывается она потому что установлен бит ошибки у потока.

Если бы ты сам захотел понять, что происходит, то дошел бы до того, что в случае со строкой программа меняет свое выполнение в конструкторе std::istream::sentry::sentry. После этого покопавшись в заголовочном файле istream ты бы наткнулся на:
* All the @c operator>> functions (aka <em>formatted input
* functions</em>) have some common behavior. Each starts by
* constructing a temporary object of type std::basic_istream::sentry
* with the second argument (noskipws) set to false. This has several
* effects, concluding with the setting of a status flag; see the
* sentry documentation for more.
*
* If the sentry status is good, the function tries to extract
* whatever data is appropriate for the type of the argument.
*
* If an exception is thrown during extraction, ios_base::badbit
* will be turned on in the stream's error state without causing an
* ios_base::failure to be thrown. The original exception will then
* be rethrown.
А потом бы, конечно, додумался проверить биты ошибок. И ты, конечно, полез бы куда-нибудь в инет, чтобы почитать про это больше... Например сюда:
http://library.forum.nokia.com/index...eam_chap3.html

Теперь мое объяснение более доступно для понимания? Если нет - то пофиг. Захочешь - разберешься. gdb в руки и вперед...
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru