Почему это только возвращает «да»

int OnLoad() {
cout << "Hi whats your name? ";
cin >> name;
system("cls");
cout << "Hi " << name << "." << " Are you here to Take Over the city from zombies?"<< endl;
cin >> userInput;
if (userInput == "yes" || "Yes") {
    cout << "Yes" << endl;
}
else if (userInput == "no" || "No") {
    cout << "No" << endl;
}
else {
    cout << "I don't understand." << endl;
}
return 0;
}

int main() {
OnLoad();
system("pause");
return 0;
}

Этот код возвращает только «да» назад, после того, как откроется окно консоли и спросит вас, хотите ли вы захватить город у зомби, даже после того, как я напечатал «нет», он возвращает «да»!

 drescherjm30 июл. 2016 г., 20:21
|| "Yes" не делает то, что ты думаешь. Это на самом деле оценивается как правда всегда! Ты хочешьif ( (userInput == "yes") || (userInput == "Yes"))
 Remi30 июл. 2016 г., 20:27
Спасибо, я действительно начал пробовать это, но я подумал, что это неправильно. Лол.
 drescherjm30 июл. 2016 г., 20:24
Я уверен, что есть сотни (если не тысячи) дубликатов этого вопроса, поэтому я не буду публиковать формальный ответ.

Ответы на вопрос(2)

Решение Вопроса
if (userInput == "yes" || "Yes")

на самом деле означает

if ((userInput == "yes") || ("Yes"))

Это логическое ИЛИ между двумя выражениями:userInput == "yes" а также"Yes", Первый является правильным и оцениваетbool непосредственно. Второй простоchar* это будет преобразовано вbool неявно. Поскольку это строка времени компиляции, она не может бытьnullptrЭто означает, что он всегда будет оцениватьtrue, А это, в свою очередь, означает, что все состояние всегдаtrue (так работает логическое ИЛИ). Правильный код

if (userInput == "yes" || userInput == "Yes")

P. S. Вот почему я всегда рекомендую компилировать с максимально возможным уровнем предупреждения (/W4 для MSVC,-Wall -pedantic-errors для GCC и лязг). Большинство компиляторов генерируют предупреждение в этом случае.

это не так, как || оператор работает, если вы просто поставите «Да» в качестве условия, оно всегда будет оцениваться как истинное

if (userInput == "yes" || userInput == "Yes") {
    cout << "Yes" << endl;
}

причина почему из-за приоритета

userInput == "yes"

а также

userInput == "Yes"

получить оценку до || (логическое ИЛИ)

Ваш ответ на вопрос