酷!學園

技術討論區 => 程式討論版 => C/C++程式設計討論區 => 主題作者是: ub901 於 2010-10-15 11:51

主題: C逗號和分號差異
作者: ub9012010-10-15 11:51
想請教一個愚蠢的問題
C逗號和分號差異
如以下程式

for(i=1;i<=100;i++)
    {
        if(i%3==0 && i%8==0)
            printf("i=%d\n",i),
            sum+=i;

    }
printf("sum=%d\n",sum);

我知道
printf("i=%d\n",i),和
printf("i=%d\n",i);
這兩個輸出是有差異

因為一個是i%3==0 && i%8==0符合此條件i的加總
另一個是i從1到100的加總
但該怎麼解釋會比較清楚呢?
是因為逗號,所以就把i的值接續給sum嗎?

主題: 回覆: C逗號和分號差異
作者: 洋蔥叔叔2010-10-15 14:38
你用分號的時候,由於 if 後面沒有加大括弧, sum+=i 不會算在 if 陳述式的一部份
代碼: [選擇]
for(i=1;i<=100;i++)
    {
        if(i%3==0 && i%8==0) {printf("i=%d\n",i);}
        sum+=i;

    }
printf("sum=%d\n",sum);

用逗號的時候,逗號當成運算子使用所以會變成:
代碼: [選擇]
for(i=1;i<=100;i++)
    {
        if(i%3==0 && i%8==0) {printf("i=%d\n",i) , sum+=i;}
    }
printf("sum=%d\n",sum);
主題: 回覆: C逗號和分號差異
作者: ub9012010-10-15 14:55
再請問一下前輩,
這樣的話是我寫程式的方法不正確嗎?!
因為我都沒想到用大括弧 :(
主題: 回覆: C逗號和分號差異
作者: 洋蔥叔叔2010-10-15 17:18
沒對錯問題,是 compiler 怎麼解讀的問題
if 不加大括弧的話他只會把第一段陳述式(到第一個分號)包含在裏面
如果這樣寫的話結果就會只有符合條件的數字加到 sum
代碼: [選擇]
for(i=1;i<=100;i++)
    {
        if(i%3==0 && i%8==0)
       {
          printf("i=%d\n",i);
          sum+=i;
        }

    }
printf("sum=%d\n",sum);
主題: 回覆: C逗號和分號差異
作者: ub9012010-10-15 17:27
嗯嗯
感謝前輩們的指導
這部份我會在注意的
謝謝!!!! :)