[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那个好像有点不对劲
今天在一本书上看到一句:
条件表达式不能取代一般的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那个好像有点不对劲