※ 引述《jiannrong@kkcity.com.tw ( )》之銘言:
: 我有一個問題,請看以下語法(我只是修改printf的敘述)
: #include<stdlib.h>
: main()
: {
: int a=7;
: printf("a=%d\n",a);
: printf("a加上5為%d\n",a+=5);
: printf("a減掉5為%d\n",a-=5);
: printf("a乘以5為%d\n",a*=5);
: printf("1a除以2為%f\n",a/=2);
: printf("a除以3餘數為%d\n",a%=3);
: float b=35;
: printf("b除以2為%f\n",b/=2);
: printf("2a除以2為%f\n",a/=2);
: system("PAUSE");
: return 0;
: }
: 執行的結果為
: a=7
: a加上5為12
: a減掉5為7
: a乘以5為35
: 1a除以2為0.000000
: a除以3餘數為2
: b除以2為17.500000
: 2a除以2為17.500000
: 請按任意鍵繼續 . . .
: 現在的重點是a是int型態
: printf("1a除以2為%f\n",a/=2);
: printf("2a除以2為%f\n",a/=2);
: 而輸出結果為
: 1a除以2為0.000000
: 2a除以2為17.500000
: 為何2a那一行會有小數出現?
這應該是dependent on complier的問題,
你可能需要先搞清楚的是...
當你使用printf傳入的參數是a/=2
那實際上它傳入的是a?還是a/2?
同樣的,
1a那行,a應該是35,
a/=2傳進去為什麼會是0.000000?
這些牽涉到complier實際上怎麼處理這些指令。
把你的程式修改一下:
#include<stdlib.h>
main()
{
int a=7;
printf("a=%d\n",a);
printf("a加上5為%d\n",a+=5);
printf("a=%d\n",a);
printf("a減掉5為%d\n",a-=5);
printf("a=%d\n",a);
printf("a乘以5為%d\n",a*=5);
printf("a=%d\n",a);
printf("1a除以2為%f\n",a/=2);
printf("a=%d\n",a);
printf("a除以3餘數為%d\n",a%=3);
printf("a=%d\n",a);
float b=35;
printf("b除以2為%f\n",b/=2);
printf("a=%d\n",a);
printf("2a除以2為%f\n",a/=2);
printf("a=%d\n",a);
system("PAUSE");
return 0;
}
輸出:
a=7
a加上5為12
a=12
a減掉5為7
a=7
a乘以5為35
a=35
1a除以2為0.000000
a=17
a除以3餘數為2
a=2
b除以2為17.500000
a=2
2a除以2為17.500000
a=1
建議你如果有興趣的話可以去看看Misra-C的資料或是上相關的課程,
因為你這樣的寫法原本就是不建議或是Ansi C當中沒有定義的。
--
▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
國 立 聯 合 大 學
(理工/電資/管理/技術/客家)院所 招生中
National United University
───────────────────────────────────
首頁 http://www.nuu.edu.tw BBS telnet://uun.twbbs.org
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.145.202