[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那个好像有点不对劲