2016-07-30 147 views
0
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; 
} 

此代碼只返回是回來後,控制檯窗口彈出並要求你在這裏從殭屍接管城市,即使我輸入否,它返回是!爲什麼這隻返回「是」

+1

'|| 「是」不符合你的想法。它總是評估爲真!你想'if((userInput ==「yes」)||(userInput ==「Yes」))' – drescherjm

+2

我確信有這個問題的數百(如果不是數千)重複,所以我不會發表正式答案。 – drescherjm

+0

謝謝,我其實開始嘗試這個,但我認爲這是錯誤的。大聲笑。 – Remi

回答

3
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和鐺)編制。在這種情況下,大多數編譯器都會生成警告。

0

這不是怎麼樣的||。運營商的作品,如果你只是把「是」爲條件,將始終爲true

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

的原因是因爲優先

userInput == "yes" 

userInput == "Yes" 

得到評估||之前(邏輯OR)