Невозможно завершить цикл while (в качестве проверки данных) во время проверки ввода строки в задаче домашней работы в C ++ - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь написать простую программу, в которой я вижу, имеет ли пользователь право на кредит.

Я пытаюсь выполнить проверку, чтобы убедиться, что пользователь не вводит тарабарщину, а когда я это делаю, он не выходит из цикла while, даже когда он больше не соответствует действительности.

Цикл while не работает.

#include <iostream>
using namespace std;

int main() {
  string employed;

  cout << "Are you currently employed?\n";
  cin >> employed;

  while (employed != "yeah" || employed != "no" || employed != "yes" ||
         employed != "Yes") {
    cout << "Enter yes or no.";
    cin >> employed;
  }
  // ...
}

Ответы [ 3 ]

4 голосов
/ 23 апреля 2019

Просто измените || на && в ваших while условиях.

while (employed != "yeah" && employed != "no" && employed != "yes" && employed != "Yes")
{
    cout << "Enter yes or no.";
    cin >> employed;
}
4 голосов
/ 23 апреля 2019

Конечно, вы не сможете пройти цикл while, вся строка будет удовлетворять условию while.Я думаю, что вы имели в виду:

while (employed != "yeah" && employed != "no" && employed != "yes" && employed != "Yes")

То есть employed не является ни одним из контролируемых входов.

0 голосов
/ 23 апреля 2019

Попробую объяснить в чем проблема более подробно, давайте упростим условие while на секунду:

while (employed != "yes" || employed != "no")

Это означает, что цикл будет выполняться до тех пор, пока внутреннее выражение оценивается как true. Предположим, пользователь вводит "yes". Вот как это будет происходить постепенно, заменив employed значением "yes"

1) while ("yes" != "yes" || "yes" != "no")

мы можем видеть, что "yes" != "yes" есть false, поэтому давайте заполним это в

2) while (false || "yes" != "no")

теперь мы оцениваем правую часть оператора или ||. "yes" != "no" ну да не равно нет, так что это правда

3) while (false || true)

Поскольку это логический оператор или , результат будет истинным, если хотя бы один из его операндов равен true. У нас есть одно true и одно false, поэтому оператор || выдает true в результате

4) while (true)

Таким образом, ваш цикл никогда не завершается, потому что хотя бы один из правого или левого всегда будет истинным Вместо этого используйте операторы и &&, которые имеют значение true, только если оба его операторов имеют значение true:

while (employed != "yes" && employed != "no")

То, что мы можем прочитать как «продолжайте, пока занятый не означает« да », а занятый - не« нет ». Вы можете связать столько дополнительных слов, сколько вы хотели бы поддержать.

...