|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
24.08.2014, 19:03 | #1 |
Новичок
Джуниор
Регистрация: 24.08.2014
Сообщений: 1
|
происходит зацикливание если вводить не число
Решил задачу "про лифт в двухэтажном доме, смысл ее в том что чел садится на 1 этаже и едет на 2, дальше вводится параметр на каком этаже садится другой человек и если лифт находится на этом же этаже человек садится в него и едет на другой.Если же лифт на другом этаже в данный момент, то сначало перемещается лифт на нужный этаж а потом уже в него садится человек.
с клавиатуры вводится этаж 1 или 2 , другое цифровое значение выводит "Нет такого этажа".Все бы не чего но если вводить букву или символ происходит зацикливание.Помогите понять почему оно происходит. Приму и критику к своему коду. Код:
Последний раз редактировалось Stilet; 24.08.2014 в 19:54. |
24.08.2014, 22:49 | #2 |
Пользователь
Регистрация: 29.06.2012
Сообщений: 39
|
Сам новичок, но насколько понимаю, то это стандартное поведение cin. Просто необходима дополнительная обработка, что-то вроде:
Код:
Код:
Например, вечный цикл можно записать так: Код:
|
25.08.2014, 01:50 | #3 |
Пользователь
Регистрация: 31.07.2014
Сообщений: 48
|
Такое поведение неудивительно, поскольку Вы пытаетесь прочитать в переменную число, а возвращается буква, поток принимает в таком случае ошибочный статус и дальнейшая работа с ним не представляется возможной.
Что бы исправить эту ситуацию, Вам нужно перед командой cin >> people; вписать сброс статуса потока, это делает функция cin.clear(). Однако, сброс состояния не поможет, потому что при следующей итерации чтение cin >> people; опять столкнется с прошлой проблемой, ведь команда cin.clear() лишь сбрасывает статус потока, но не очищает его. Соответственно, нужно очистить поток, это делает команда cin.sync(). Но, следует сказать, что это решение является лишь "заглушкой" и не приемлемо в маломальски профессиональных кодах. А заместо использования cin.sync() лучше использовать такую команду, подключив библиотеку <limits>: cin.ignore(numeric_limits<streamsiz e>::max(), '\n'); Либо такую: cin.ignore(cin.rdbuf()->in_avail()); Можно переписать Вашу программу вот так, более эстетично и эффективно: Код:
Последний раз редактировалось DakotaZ; 25.08.2014 в 02:55. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ввести число. Если оно положительное, найти его квадратный корень. Если отрицательное - возвести в квадратВвести число. Если оно п | FYNZIK | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 18.02.2014 16:29 |
У меня происходит зацикливание?(Оператор switch(),циклы) | zaira001002 | Общие вопросы C/C++ | 7 | 01.10.2013 10:40 |
Почему происходит зацикливание? | Arigato | Общие вопросы Delphi | 8 | 29.04.2013 19:06 |
Дано трехзначное число. Если в сумме его цифр присутствует число 7,то число записать в зеркальном виде ( Паскаль ) | Эля777 | Помощь студентам | 5 | 22.04.2013 23:23 |
вводить только число | kursant95 | Microsoft Office Excel | 8 | 16.02.2011 13:01 |