2016-11-21 131 views
-1

我在檢查學生的作業。 這項任務是將大量英文字母打印到控制檯。 出於某種原因,他所做的工作(七號線):這個C代碼爲什麼工作? (它不應該)

int main(void) 
{ 
    char first = 'A'; 
    char last = 'Z'; 
    int amount = 0; 

    amount = ("%d - %d", last - first + 1); 
    printf("The amount of letters in the English alphabet is %d\n", amount); 
    return(0); 
} 

看過之後,我試圖把其他的東西在括號而不是「%d - %d」。無論我放在那裏,還有多少逗號,它只會在最後一個逗號後面(這是正確的句子)。

那裏實際發生了什麼?

+0

呃,你是老師嗎?你需要的是逗號操作符。 –

+0

閱讀[逗號運算符](http://en.cppreference.com/w/c/language/operator_other#Comma_o​​perator)。 –

+7

給那個學生A +。他教你「逗號運算符」。 – haccks

回答

3

這是使用comma operator的示例之一。在

("%d - %d", last - first + 1); 

逗號("%d - %d")的LHS操作數進行評價的情況下,結果被丟棄,然後RHS(last - first + 1)被評估並且作爲結果返回。然後將結果分配到amount,因此,您有amount,其中包含操作last - first + 1的結果。

引用C11,章§6.5.17,逗號操作

逗號操作者的左操作數被作爲void表情評估;在它的評估和右操作數的評估之間有一個 序列點。然後評估右邊的 操作數;結果有它的類型和價值。

FWIW,在這種情況下,"%d - %d"只不過是另一種字符串字面,它不帶有任何特殊意義

+0

非常感謝。我問過很多比我更有經驗的程序員,但沒人知道答案。 – bloop

相關問題