2015-11-19 3 views
0

Итак, я хочу принять два входа, строку и int, а также когда пользователь вводит «конец», чтобы выйти из цикла. Моя проблема заключается в том, что введен «конец», что он застревает в цикле, поскольку (я предполагаю) он ожидает два входа, когда пользователь вводит только один. Я провел некоторое исследование и нашел материал по отбрасыванию ввода и сбросу его с cin.ignore() и cin.clear(), однако они, похоже, применяются только при принятии одного входа, где, когда я запрашиваю два отдельных входа в одной строке и он, похоже, не работает. Что делает мой код, в основном запрашивает список вещей (значение имени), сохраняя его в массиве в классе и ограничивая 10 элементов. Таким образом, когда «end» вводится, ему нужно только выйти из цикла while. Все остальное работает нормально, т. Е. Когда я вхожу в 10 элементов, он выходит из цикла, а остальная часть кода выполняется так, как должна. Таким образом, кажется, что проблема возникает при вводе «конца». (p.s. a - строка и b в типе int). Раздел код:Как остановить бесконечный цикл из-за недопустимого ввода C++

do { 

    cout << "Enter the item and value (enter 'end' to stop): "; 
    cin >> a >> b; 

    items1.set_name(a, i); 
    items1.set_price(b, i); 

    i++; 

} while (i < 10 && a != "end"); 

Это кажется, что это должно быть очень просто, и мне очень жаль, если его глупый вопрос, но я не могу понять его Хаха. Заранее благодарим меня за помощь.

+1

Какие типы '' Ā' и b'? – Chad

+0

Возможный дубликат [Почему я получаю бесконечный цикл, если я ввожу букву, а не число?] (Http://stackoverflow.com/questions/19521320/why-do-i-get-an-infinite-loop- if-i-enter-a-letter-rather-than-a-number) – Galik

+0

Вы не проверяете состояние потока после ввода. Перед обработкой данных перед началом обработки имейте окончательный '' f (cin) '. –

ответ

2

Необходимо проверить значение a ПЕРЕД прочтением b; что-то вроде этого:

cin >> a; 
if(a == "end") 
    break; 
cin >> b; 
+0

Это сработало, и так просто, ха. Спасибо за помощь! –

0

Чтобы выйти из цикла, используйте

if (a == "end" || b == "end") break; 
Смежные вопросы