[100分送上]很迷惑的一句话:条件表达式不能取代一般的if语句?该怎么解决

[100分送上]很迷惑的一句话:条件表达式不能取代一般的if语句?
今天在一本书上看到一句:
条件表达式不能取代一般的if语句,仅当if语句中内嵌的语句为赋值语句时(且两个分支都给同一个变量赋值)才能替代if语句;
例如:
if(a%2==0)
printf( "even ");
else
printf( "odd ");
就不能写成:
(a%2==0)?printf( "even "):printf( "odd ");
--------------------------------------------
可是我用dev却明明可以运行~~

谁来解释哈?


------解决方案--------------------
lz有才
------解决方案--------------------
书上也就那么一说,也不是真理!

------解决方案--------------------
倒是可以写printf((a%2==0)? "even ": "odd ");
------解决方案--------------------
vc7 可以
------解决方案--------------------
int a = 3;
int b = 0,c = 0;
scanf( "%d ",&a);

((a%2==0)?b:c) = 4;

printf( "b=%d, c=%d\n ",b,c);

------解决方案--------------------
就不能写成:
(a%2==0)?printf( "even "):printf( "odd ");

用vc 是可以的!!
------解决方案--------------------
#include "stdio.h "
#include "stdlib.h "

#define FMT(a) ((a)%2==0)?printf( "even "):printf( "odd ")

main()
{
FMT(2);
}

其实2个写法都对 只是楼主在理解方面出了点偏差,也怪作者没描叙清楚

------解决方案--------------------
i wanna gain some marks please
------解决方案--------------------

都是可以的

void main()
{
int a = 5;

// 1

if (a % 2 == 0)
printf( "even\n ");
else
printf( "odd\n ");


// 2

(a % 2 == 0) ? printf( "even\n ") : printf( "odd\n ");


// 3

printf((a % 2 == 0) ? "even\n " : "odd\n ");


}


------解决方案--------------------
printf 的返回是 int,且两个都是 printf,所以没有违反 ?: 需要的条件。
------解决方案--------------------
复值也是ok的

int a = 10;
int c = 0;
int d = 0;

(a % 2 == 0) ? c = a : d = a;

cout < <c < <endl < <d < <endl;
------解决方案--------------------
回复人:Chiyer(星羽) ( 一星(中级)) 信誉:100 2007-07-26 18:38:34 得分:0
?
当然,不能取代3个分支以上的if了
============================================
() ? (() ? () : () ) : ()
------解决方案--------------------
唉,不必钻牛角尖吧,实际使用中,方便用就行
------解决方案--------------------
看语法图最清楚。
------解决方案--------------------
中国SB写的书
------解决方案--------------------
这种东西有什么好写进书里的,徒增误解。你不写进书里难道有人会用一堆?=代替if?

------解决方案--------------------
不同的编译平台就可能有不同的规则~~不过觉得LZ那个好像有点不对劲