2016-11-21 87 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

相关问题