簡體   English   中英

使用 ? : 第一次用C

[英]Using ? : in C for the first time

我剛在學校開始學習編程,我學會了如何使用? : ? :第一次。 我的第一個問題是這叫什么,因為我的教授沒有說它叫什么。

其次,我正在編寫一個程序,它在給定偶數時打印偶數,在給定奇數時打印奇數。 我想這樣寫

int main() {
    int x = 3;
    char *string;

    if (x % 2 == 0 ? string = "Even" : string = "Odd");

    printf("%d is %s", x, string);
}

問題是我得到一個錯誤error: lvalue required as left operand of assignmentif (x % 2 == 0 ? string = "Even" : string = "Odd"); 它是string = "Odd"部分。

我是否不允許將表達式分配給if( ? : )內的變量? 我想保持我的代碼簡短,而不必像

if (x % 2 == 0) {
    printf("%d is Even", x);
} else {
    printf("%d is Odd", x);
}

不要使用三元運算符來調用每個子句中的語句。 也就是說,不要將其用作 if/else 的替代品。 將其用於作業:

取而代之的是:

if (x % 2 == 0 ? string = "Even" : string = "Odd");

這:

string = (x % 2 == 0) ? "Even" : "Odd";

這個運算符 ?: 在 C 中稱為條件運算符。 程序員也將其稱為三元運算符,因為該運算符具有三個操作數。

它是在 C 中定義的

conditional-expression:
    logical-OR-expression
    logical-OR-expression ? expression : conditional-expression

賦值運算符的優先級低於條件運算符。

if 語句中的這個條件運算符

if (x % 2 == 0 ? string = "Even" : string = "Odd");

是不正確的。 實際上它等價於

if ( ( x % 2 == 0 ? string = "Even" : string ) = "Odd" );

如果 if 語句中的條件運算符將正確寫入,如

if (x % 2 == 0 ? string = "Even" : ( string = "Odd" ) );

盡管如此,使用 if 語句本身沒有意義,因為 if 語句中的表達式返回一個指向字符串文字的指針,該指針不是空指針。 這就是 if 語句沒有子語句並且它的條件總是評估為邏輯真。

您只需要編寫以下語句

x % 2 == 0 ? string = "Even" : ( string = "Odd" );

或者為了提高可讀性,比如

x % 2 == 0 ? ( string = "Even" ) : ( string = "Odd" );

或更簡單的

string = x % 2 == 0 ? "Even" : "Odd";

注意 C 和 C++ 中條件運算符的定義是有區別的。 在 C++ 中,運算符的定義如下

conditional-expression:
    logical-or-expression
    logical-or-expression ? expression : assignment-expression

如您所見,第三個表達式可能是賦值表達式。 這意味着您可以用 C++ 編寫您的條件運算符,例如

x % 2 == 0 ? string = "Even" : string = "Odd";

不將第三個操作數括在括號中。

它被稱為“條件運算符”。 因為它是只要 C 和 C++ 中最著名的三元運算符(意​​味着它需要三個操作數),許多人稱它為三元運算符。

條件運算符: ?

 expression ? expression : expression

條件運算符 (? :) 是一個三元運算符(它需要三個操作數)。 條件運算符的工作原理如下:

第一個操作數被隱式轉換為 bool。 在繼續之前對其進行評估並完成所有副作用。

如果第一個操作數的計算結果為真 (1),則計算第二個操作數。

如果第一個操作數的計算結果為假 (0),則計算第三個操作數。

條件運算符的結果是計算任何操作數的結果——第二個或第三個。 在條件表達式中只計算最后兩個操作數中的一個。

確定表達式類型的規則有點復雜。 簡單來說它的類型是第二個和第三個操作數之間的公共類型

?:稱為三元或條件運算符。

最后兩行可以合並成一行,如下所示:

printf("%d is %s\n", x, (x % 2 == 0) ? "Even" : "Odd");

您也不需要string變量。

暫無
暫無

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

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