2017-02-09 23 views
-5
string a, b; 
cin >> a >> b; 
if (a == "yes") break; 
... 

Почему это не работает так, как будто оно должно работать? Если пользователь вводит «да, пожалуйста» или «да», программа должна выйти из любого цикла, в котором он находится, но это не то, что происходит. Консоль просто печатает линию и ждет. Что я здесь делаю неправильно?C++ Проверьте первый вход двух в той же строке

+0

Подсказка: Вы можете открыть банку с червями и использовать [регулярное выражение] (http://en.cppreference.com/w/ cpp/regex). Вы никогда не знаете, это может сработать. – tadman

+2

Программа будет ждать, если вы введете только «да». Он не должен ждать, если вы введете «да, пожалуйста». –

+0

Вопросы, требующие помощи по отладке («почему этот код не работает?») Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для воспроизведения в самом вопросе. Вопросы без четкого описания проблемы не полезны другим читателям. См. [Как создать минимальный, завершенный и проверяемый пример] (http://stackoverflow.com/help/mcve). –

ответ

2

Считанные второй строки b является не необязательной, так что если вы вводите "yes" или любое другое одно слово, программа блоки позволяют ввести вторую.

Поток операций идет следующим образом:

  • Дождитесь первого слова в a
  • Дождитесь второго слова в b
  • Сравните первое слово "yes"

Обратите внимание, что сравнение не начинается до тех пор, пока не закончится чтение b.

Если вы хотите, чтобы выйти из цикла на простом "yes", прочитать a, сравнить его с "yes", сломаться, если это необходимо, и только потом прочитал b:

cin >> a; 
if (a == "yes") break; 
cin >> b; 

Теперь, если петля не выходит у вас есть и a и b, и вы знаете, что a не равно "yes".

+0

Спасибо за отличное объяснение – Norse

0

В настоящее время:

string a, b; 
cin >> a >> b; 
if (a == "yes") break; 
... 

Правильный способ сделать это было бы как следует. b не имеет значения, когда вы одновременно указываете a и b.

string a, b; 
cin >> a; 
if (a == "yes") 
{ 
break; 
} 
cin >> b; 

б все равно «быть на той же строке»

 Смежные вопросы

  • Нет связанных вопросов^_^