2015-12-12 3 views
-2

«или» операнд «делать в то время как» петляМогу ли я включить «или» операнд с помощью цикла while?

Я попытался в том числе «или» операнда в моей делать во время цикла

if(input2 == "1"){ 
    string input3; 
    do { 
     cout << "Which would you like to check?" << endl; 
     cout << "1. Checking." << endl; 
     cout << "2. Savings." << endl; 
     cout << "3. Credit Card." << endl; 
     cin >> input3; 
      if(input3 != "1"||"2"||"3"){ 
      cout << "That is an invalid response. Please enter again." 
      <<endl; 
      } 
    } while(input3 != "1"||"2"||"3"); 
} 

но не кажется, что это будет работать. Даже если я ставлю либо 1, 2, либо 3, он по-прежнему читает его как недействительный ответ. Что я делаю не так?

+6

'} while (input3! =" 1 "&& input3! =" 2 "&& input3! =" 3 ")' –

+0

Показывать true, cout a nd cin, а затем проверять регистр для параметров, ломаться, когда выбран приемлемый параметр, а по умолчанию - недопустимый ответ. BTW ... у бедного пользователя должен быть выход из цикла. – user430051

ответ

3

Вообще-то есть ошибка в вашем состоянии.

Булевский || используется неправильно. Если вы хотите проверить, если a 'равно 1 или 2 вы должны проверить его, как этот

a == 1 || a == 2

Когда вы говорите input3 != "1"||"2"||"3" Это будет первая оценка input3 != "1" || "2" || "3". Это всегда будет оцениваться как ИСТИНА, потому что все, что не равно нулю и может быть преобразовано в логическое, не false в C++.

Модификация кода использовать правильные сравнения ..

if(input2 == "1"){ 
    string input3; 
    do { 
     cout << "Which would you like to check?" << endl; 
     cout << "1. Checking." << endl; 
     cout << "2. Savings." << endl; 
     cout << "3. Credit Card." << endl; 
     cin >> input3; 
      if(input3 != "1" && input3 != "2" && input3 != "3"){ 
      cout << "That is an invalid response. Please enter again." 
      <<endl; 
      } 
    } while(input3 != "1" && input3 != "2" && input3 != "3"); 
} 
+0

Там есть второй. – LogicStuff

+2

Возможно, вы не возражаете сказать OP, что это за ошибка? –

+0

Спасибо за указатель, я редактировал свой ответ. – Fawzan

1

Этот код:

input3 != "1"||"2"||"3" 

средства (вход3 не "1") или ("2") или ("3 ")

Строковый литерал типа« 2 »в C++ будет оценивать логическое значение true при использовании в булевом выражении типа this, поэтому ваше выражение всегда будет считаться истинным.

Я думаю, что вы хотите это:

input3 == "1" || input3 == "2" || input3 == "3" 

означает вход3 это не как "1", "2" или "3"

или

input3 != "1" && input3 != "2" && input3 != "3" 

означает вход3 не является ни из «1», «2» или «3»

+0

Я сомневаюсь, что он этого хочет. Это выражение безоговорочно верно. –

+0

Вы правы. редактирования. –

+0

Спасибо большое! что отлично работало. Я подумал, может быть, мне не нужно было повторять вход 3, и это также помогло сделать его короче. – John

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