| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1703 人关注过本帖
标题:[求助]有关于自加自减的问题
只看楼主 加入收藏
wyg4859
Rank: 2
等 级:新手上路
威 望:4
帖 子:883
专家分:0
注 册:2006-8-2
收藏
得分:0 
哦,那m在判断时候是成了6了,可是那它在最后的m--时候为什么没有计算呢,应该是5吧,请各位指教!

http://www.找到组织!找到党!
2006-08-23 18:28
inku
Rank: 1
等 级:新手上路
帖 子:122
专家分:0
注 册:2006-8-6
收藏
得分:0 
我上机调试了一下,答案的确是6
2006-08-23 19:06
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
收藏
得分:0 
以下是引用inku在2006-8-23 16:26:05的发言:

我同意前辈说的已经进行(m++>5)这个判断,可是实际上m++>5是不成立的,
m++>5是不成立,但并不代表没执行过m++,

所以程序不会执行printf("%d\n",m);,所以m就不会等于6

m等不等于6跟是否执行printf("%d\n",m);有什么关系??


汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-08-23 19:09
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

已經說過 if(m++>5) 相當於 if(m>5, m++)
-------------------------------------------------------------
我們來做兩個測試,,...

int i = 0;
int m=4;
if(m>5, i++) ;
printf("%d", i); //////// 輸出 1

int i = 0;
int m=6;
if(m>5, i++);
printf("%d", i); ///// 輸出 1
-------------------------
也就是說, 不管 m>5 與否, i++ 都是要執行的
-------------------------

if(m++>5) ===== if(m>5, m++)
逗號運行符, 先計算 m>5 作爲 if 的判斷條件, 然後執行 m++


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-23 19:18
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
已經說過 if(m++>5) 相當於 if(m>5, m++)
前者:
if(m>5)

m++;  
do something;

后者:
if(m!=0)
{
m++;
do something;
}
两者不同。

对不礼貌的女生收钱......
2006-08-23 19:28
mimangxiaobing
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-8-7
收藏
得分:0 
main()
{ int m=5;
if(m++>5) printf("%d\n",m);
else printf("%d\n",m--);
}

其实感觉他钻洞里出不来了
你换个方法想下
if(m++>5) 你想下以前学的自增 M++是先计算后M值+1 也就是M++这个试子的现在结果是5 但M直已经变位6了
在执行下一个m++>5
式子的结果是5>5所以不成立
就运行else 执行m-- 式子结果是6 M值已经变5了`

其实M变成6那里我感觉就像给从新附值了一样 新手``见笑了

2006-08-23 20:23
ww84020209
Rank: 1
等 级:新手上路
帖 子:190
专家分:0
注 册:2006-8-21
收藏
得分:0 
if(m++>5) 不等价于 if(m>5, m++)
m>5,m++是一个逗号表达式,整个逗号表达式的值是后面表达式的值,也就是m++的值!

举个例子:
#include<stdio.h>
int main()
{
int i = 0;
int m=5;
if(m>5,m++)
printf("%d", i);//此语句会被执行,因为if括号里表达式的值为m++,即为5,非0就为真
return 0;
}

#include<stdio.h>
int main()
{
int i = 0;
int m=5;
if(m++>5)
printf("%d", i);//此语句会被执行
return 0;
}

2006-08-23 20:40
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

看來是可能你沒有看到我 if 後面的分號


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-23 21:51
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 
以下是引用soft_wind在2006-8-23 19:28:34的发言:
已經說過 if(m++>5) 相當於 if(m>5, m++)
前者:
if(m>5)

m++;  
do something;

后者:
if(m!=0)
{
m++;
do something;
}
两者不同。

我還是, 不這樣想的....


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-23 21:54
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

#include "Stdio.h"
#include "Conio.h"

int main(void)
{
int m=0;
if(m++<2)
printf("yes");
/*
if(m<2,m++)
printf("yes");
*/
else printf("no");
getch();
return 0;
}
再改用注释部分测试。

[此贴子已经被作者于2006-8-23 22:13:41编辑过]


对不礼貌的女生收钱......
2006-08-23 22:12
快速回复:[求助]有关于自加自减的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016848 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved