2015-10-08 3 views
-1

Приложение просит пользователя ввести основную студентку - математику или СНГ, и я хотел бы сделать так, чтобы пользователь вводил что-то другое, кроме двух, оно выдавало сообщение об ошибке и запрашивало пользователя снова войти в майор.Вопросы с оператором IF

Вот то, что я до сих пор:

 cout << "Math or CIS Major: "; 
     cin >> major; 
      if (major != "math" || major != "Math" || major != "CIS" || major != "cis") { 
      cout << "Invalid major" << endl; 
      } 

     cout << "Enter students GPA: "; 
     cin >> studentGpa; 

Это даст неверное основное сообщение, но это будет просто перейти на ГПД

По некоторым причинам я не могу вспомнить основы и это меня отключает.

Также, если кто-то может направить меня в правильном направлении для альтернативы ||, я знаю, что это не лучший способ сделать это, но снова я боюсь с помощью лучшего способа сделать это снова

+0

И переменная майор - это что? Переменная char? Если да, тогда сравниваются только указатели. – KIIV

+0

Вам понадобится цикл while в чтении и проверке ввода, проверки и ('&&') insteaf или ('||') в 'if'. А для упрощения проверок вы можете использовать функцию 'strToLower()' (читайте здесь: http://stackoverflow.com/questions/313970/how-to-convert-stdstring-to-lower -case). – Ilya

+0

Оператор if, переведенный на английский язык (два условия опущены для простоты), говорит: ** Если мой майор отличается от математики OR, отличной от CIS, то он недействителен. ** Понимаете, почему это неправильно? – jrok

ответ

2

Заменить OR (||) с и (&&)

if (major != "math" && major != "Math" && major != "CIS" && major != "cis") 
0

Вы смущены между ИЛИ (||) и AND (& &). Замена || на && в условиях IF должна сделать трюк.

Какое ваше текущее if заявление проверено (if A is not equal to B) OR (if A is not equal to C). Если B и C различны, то A может при max быть равным одному из них, или, другими словами, всегда будет не равным хотя бы одному из них.

Итак, ваше состояние всегда будет равно true. Правильный термин для этого заключается в том, что ваше условие if является тавтологией.

Если вы хотите, чтобы пропустить все это и хочу код:

if (major != "math" && major != "Math" && major != "CIS" && major != "cis") { 
1

Если вы хотите, чтобы пользователь должен ввести действительный крупный, то вам необходимо поместить его в петлю:

std::string major; 
std::cout << "Major: "; 
std::cin >> major; 
while (major != "math" && major != "Math" && major != "CIS" && major != "cis") 
{ 
    std::cout << "Please enter a valid major!\n"; 
    std::cout << "Major: "; 
    std::cin >> major; 
} 

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

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