作者james732 (好人超)
看板C_and_CPP
標題Re: [問題] 判斷式if括號內的"=" and "= ="
時間Tue Oct 19 15:25:38 2010
要先知道兩件事情。
第一件事:先看一下以下的程式
if (0)
printf("never print\n");
else if (1)
printf("1");
else if (2)
printf("2");
對C語言來說,if(
括號裡面的這裡)
如果放的是 0, 那麼就是 false, 也就是不成立,不會執行之後的動作
如果放的是非 0, 0 以外的任何值,那就是 true, 成立,會執行之後的動作
第二件事:
int i;
printf("%d\n",
i = 10);
這個時候 printf 會印出 10
因為用單一等號「=」的時候,除了右邊的值會複製到左邊
另外也會
再回傳同樣的值
: #include<stdio.h>
: void main(void){
: int n=0;
: if(n=0) n=1;
結合以上兩件事情,
if (n = 0) 可以拆成兩個動作:
(1) n = 0 並且回傳 0
(2) if (0) <== 上面的第一件事,得到 false,因此會跑下去 else if
: else if(n=1) n=2;
同樣 else if (n = 1) 做的事情
(1) n = 1 並且回傳 1
(2) else if (1) 得到 true,因此會執行 n = 2;
: else if(n=2) n=3;
: else if(n=3) n=4;
if ... else if ... else if ... else ...
只會執行遇到的第一個 true, 之後就會略過了
因此 n = 3 與 n = 4 根本不會執行
: printf("%d\n",n);
: }
這個時候的 n 自然就等於 2
--
ps. 用「回傳」這個詞好像有點怪怪的
ps2. 我幹嘛這麼認真....
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.171.46
※ 編輯: james732 來自: 140.117.171.46 (10/19 15:28)
推 kai5566:感謝您!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 10/19 15:31
→ kai5566:我代表5566全體同仁跟您道謝!!! 我愛妳!!! 10/19 15:31
→ kai5566:儒果你想加入56天團 我絕對歡迎~~~~~~~~~ 10/19 15:32
→ james732:不知道為什麼一點都不覺得開心 ╮(﹀_﹀")╭ 10/19 15:32
推 clarkman:XDDDDDDDDDDD 10/19 15:33
推 lwecloud:lol 你是個好人 10/19 15:46
推 BlazarArc:XDDDDDDDDDDDDDD 10/19 21:26
→ azaz12345:YA~~~~~5566 10/19 23:49
推 cutewing:解釋的很清楚!長知識了,謝謝 10/20 01:31
推 ilemon:沒錯,你得到他了,推好人 10/20 02:08