簡體   English   中英

C++ 復合邏輯運算符不與比較運算符一起使用

[英]C++ Compound Logical Operators not Working with Comparison Operator

我正在編寫的程序中有兩種情況,我正在使用復合邏輯運算符有效地將變量與多個值進行比較。 其中之一工作得很好。 我有一個字符數組,我想檢查其中一個元素是否等於兩個值之一,而不必重述變量。 我還有一個名為 hourInt 的 integer,但這並不重要。 我用於條件的代碼如下:

 if (charArray[8] == 'P' || 'p' && hourInt != 12){
    hourInt += 12;
 }
 if (charArray[8] == 'A' || 'a' && hourInt == 12){
    hourInt -= 12;
 }

並且這兩個條件都正確執行了它們的工作——它們檢查 charArray[8] 是否等於兩個值之一。 但是,后來在程序中,我再次嘗試使用復合邏輯運算符。 我有一個名為 meridis 的兩個字符的字符串,我想看看它是否不等於四個值之一。 我用復合邏輯運算符設置了一個條件,如下所示:

if (meridies != "AM" || "am" || "PM" || "pm"){
    cout << "Error: Unknown value for the meridies." << endl;
    return inputTime();
}

與正確比較值的第一個條件不同,第二個條件始終返回 true,即使 meridies 確實等於四種情況之一。 我知道我可以將其設置為四個不同的比較,每個比較都有自己的邏輯運算符,但我只是想知道為什么第二個條件不起作用而第一個條件起作用。

是的,您可能需要閱讀運算符的工作方式(以及運算符優先級)。

首先,這是一個廢話:

charArray[8] == 'P' || 'p'

您是說,如果 (charArray[8] == 'P') 為真,或 'p' 為真。 'p' 將永遠為真,因為它不為零。 目前尚不完全清楚您要使用該代碼做什么,但我假設這些內容?

if ( (charArray[8] == 'P' || charArray[8] == 'p') && hourInt != 12)

至於這個:

if (meridies != "AM" || "am" || "PM" || "pm")

如果meridas 是一個 std::string,那么它應該是:

if (meridies != "AM" && meridies != "am" && meridies != "PM" && meridies != "pm")

但是,如果 meridis 是一個 char 數組,那么您應該這樣做:

if (strcmp(meridies, "AM") != 0 && 
    strcmp(meridies, "am") != 0 && 
    strcmp(meridies, "PM") != 0 && 
    strcmp(meridies, "pm") != 0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM