Re: [問題] 判斷式if括號內的"=" and "= ="
要先知道兩件事情。
第一件事:先看一下以下的程式
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)
推
10/19 15:31, , 1F
10/19 15:31, 1F
→
10/19 15:31, , 2F
10/19 15:31, 2F
→
10/19 15:32, , 3F
10/19 15:32, 3F
→
10/19 15:32, , 4F
10/19 15:32, 4F
推
10/19 15:33, , 5F
10/19 15:33, 5F
推
10/19 15:46, , 6F
10/19 15:46, 6F
推
10/19 21:26, , 7F
10/19 21:26, 7F
→
10/19 23:49, , 8F
10/19 23:49, 8F
推
10/20 01:31, , 9F
10/20 01:31, 9F
推
10/20 02:08, , 10F
10/20 02:08, 10F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):