2016-02-18 51 views
-2

好,我敢肯定,它還真有點說我失蹤,但這裏的東西是我:爲什麼我的程序繼續進入我的輸入驗證循環?

int main() 
{ 
     string red = red, blue = blue, yellow = yellow, color1, 
     color2, mixResult; 

     cout << "Please enter a primary color." <<endl; 
     cin >> color1; 

     while ((color1 != red) || (color1 != blue) || (color1 != yellow)) 
     { 
     cout << "Error!: Please enter a primary color." <<endl; 
     cout << " *NOTE ALL ENTRIES MUST BE LOWERCASE* " <<endl; 
     cin >> color1; 
     } 

現在,由於某種原因,每次我跑這一點,例如進入時間紅燈程序進入,同時循環,它不應該。任何幫助將不勝感激。我可以顯示更多的我的代碼,我使用的#include

+2

'string red = red,blue = blue,yellow = yellow'是未定義的行爲。 –

+1

假設你修復@DieterLücking問題,(你是如何得到它的?),邏輯是錯誤的。如果顏色是黃色,那麼它不是紅色,所以'color1!= red'是真實的。甚至不需要查看與其進行或運算的其他表達式。 –

+0

沒有任何顏色可以將多個'!='變成'false',所以至少有兩個'||'的子表達式是'true'。它需要一個'true'子表達式將一個OR轉換爲'true',所以你的循環永遠不會結束。淨結果是你需要一個'&&'。 – dasblinkenlight

回答

3

你的while循環看起來不對。它應該是這樣的。

修復: while ((color1 != red) && (color1 != blue) && (color1 != yellow)) //如果輸入不等於任何這些顏色。

Your's while ((color1 != red) || (color1 != blue) || (color1 != yellow)) //如果輸入爲紅色,則第一個條件爲假,但第二個和第三個條件爲真。這就是它循環的原因。

0

while ((color1 != red) || (color1 != blue) || (color1 != yellow))

由於color1只能是一個值,除非red == blue == yellow,這個循環將永遠運行下去。你的意思大概是

while ((color1 != red) && (color1 != blue) && (color1 != yellow))

此外,正如其他人所指出的那樣,你需要周圍的引號的文本正確初始化字符串變量:

string red = "red", blue="blue", yellow="yellow"

否則你」重做次數爲:

string red; // red is an uninitialized string 
red = red; // no kidding?! :) 
0

您將顏色初始化爲自身,這是未定義的行爲。改用字符串常量。你應該使用& &,而不是||。

正確的代碼:

#include <iostream> 
#include <string> 

using namespace std; 
int main() 
{ 
    string red = "red", blue="blue", yellow="yellow", color1; 

    cout << "Please enter a primary color." <<endl; 
    cin >> color1; 

    while ((color1 != red) && (color1 != blue) && (color1 != yellow)) 
    { 
     cout << "Error!: Please enter a primary color." <<endl; 
     cout << " *NOTE ALL ENTRIES MUST BE LOWERCASE* " <<endl; 
     cin >> color1; 
    } 
} 
0

像其他人說,這個問題是在同時的條件。在這種情況下,您必須使用&&

想想這樣,如果color1分配的值爲「藍色」,則它不是「紅色」,因此條件color1 != "red"TRUE

對於其餘的值也是如此,因此即使color1的值是可接受的值之一,整個條件仍將爲TRUE

相關問題