2011-06-23 85 views
1

我有一個if語句看起來如下:如果語句不似乎在檢查其他&&在聲明中

int count=0; 
string Check; 

if ((count==4 && Check!="-s")||(count==4 && Check!="-S")) 

如果count等於4和Check等於"-s""-S"它仍然進入,因爲count == 4這個if聲明。它完全似乎忽略了第二部分。有什麼我做錯了嗎?

+0

對於比較C++字符串,則必須使用'比較()'funcion這樣的:http://www.cplusplus.com/reference/string/字符串/比較/ – jlledom

+2

@JoanLledó:C++'std :: string'類重載'=='運算符,以便它在這種情況下「神奇地」起作用。 –

+0

嘗試:if(count == 4 && Check!=「 - s」&& Check!=「 - S」) – Tom

回答

2

那麼,如果Check"-S",那麼它甚至不會檢查第二對條件,因爲您使用||進行檢查。對於相反的情況也是如此。如果一個人是假的,另一個是真的。將其替換爲&&

int count = 4; 
string Check = "-S"; 

if((count == 4 && // count is 4, alright. 
    Check != "-s") || // Check is "-S", alright I'm done thanks to || (OR) 
    (count == 4 && 
    Check != "-S")) 
{ 
    // ... 
} 

int count = 4; 
string Check = "-s"; 

if((count == 4 && // count is 4, alright. 
    Check != "-s") || // Check is "-S", time to check the other condition pair... 
    (count == 4 && // count is 4, alright. 
    Check != "-S")) // Check is "-s", which is different from "-S", perfect. 
{ 
    // ... 
} 

現在修正版本:

int count = 4; 
string Check = "-S"; 

if((count == 4 && // count is 4, alright. 
    Check != "-s") && // Check is "-S", different from "-s", now on to the other condition! 
    (count == 4 && // count is 4, alright. 
    Check != "-S")) // Check is "-S"... oh dang! No executed code for you. 
{ 
    // ... 
} 
2

如果count == 4Check == "-s",則體現出了||右邊是真實的。如果count == 4Check == "-S",則表示||左側的表達式爲真。所以你是真實的或真實的。因此,你的if塊被執行。

4

總是會出現這種情況,即Check!="-s"Check!="-S"。因此,您的if語句相當於if (count==4)

2

正確的說法是:

if(count==4 && (Check != "-s" || Check!="-S")) 

,你寫的是真實的,如果你有數量= 4,檢查=「-S」,因爲這樣或第一部分是真實的陳述。

+0

這也因爲OR的第一部分爲真而失敗。 – Ravi

+0

OR的至少**一個**部分總是如此。 –

+0

由於@vrxacs在他的例子中使用了Check =「 - S」,我的意思是這會導致OR的第一部分爲真。 – Ravi

1

您應該使用!strcmp(Check,「-s」)和!strcmp(Check,「-S」)而不是!=。

如果你使用==你比較指針,那就是你想要的。指針總是會有所不同,因此您的第二個參數將始終爲真。

+0

嗯,這就是如果你正在處理char *,而不是類型字符串,它是在運算符==重載的C++中的的一部分 – lccarrasco

1

你想輸入if body當且僅當檢查是!=從-s或-S和count是= 4對嗎?

if ((Check!="-s" && Check!="-S") && count==4) 

應該工作。

if (Check.tolower() !="-s" && count==4) 

應該工作。

(不記得函數的名稱以小寫的字符串,你得看它)

希望這有助於。

2

可能更清楚使用方法:

if (count==4 && Check!="-s" && Check!="-S")