C语言条件运算符(?:)的用法

前面我们讲到过,编程时总希望尽可能地减少代码的输入量。在C语言中,使用条件运算符可以代替 if…else… 语句(见图 1),不仅能减少代码输入量,还可以避免漏掉必需的{ }括号。其一般格式如下:
(condition)?(条件成立时执行的语句):(条件不成立时执行的语句)       //condition 可以是任何形式的条件判断表达式

使用条件运算符“?:”可以替换 if…else… 语句
图 1:使用条件运算符? :可以替换 if…else… 语句

比如下面使用条件运算符的语句,表示当 total 的值小于等于 2000 时,把它的值增大为原来的 1.2 倍:total*1.20,当 total 的值大于 2000 时,把它的值增大为原来的 1.5 倍:total*1.50。
(total<=2000)?(total*=1.20):(total*1.50);         ①
等价于:
if(total<=2000)
    {total *= 1.20;}
else
    {total *= 1.50;}

条件运算符可以看成“用问号?提出一个问题,当它成立时,就做冒号:之前的事;否则,就做冒号之后的事”。

上面的语句 ① 中,因为给变量 total 赋值出现了两次,使用条件运算符可以更加简化为下面的形式:
total *= (total<=2000)?(1.20):(1.50);

条件运算符还可以出现在 if 语句不能出现的地方。比如下面的printf( )中,如果梨(pear)的个数大于 1,就打印其复数形式(在最后多打印一个 s),具体情况如图 2 所示。
printf("I ate %d pear%s.",numPear,(numPear>1)?("s"):(""));

条件运算符可以出现在 if…else… 语句不能出现的地方
图 2:条件运算符可以出现在 if…else… 语句不能出现的地方