作者 主題: C逗號和分號差異  (閱讀 5325 次)

0 會員 與 1 訪客 正在閱讀本文。

ub901

  • 懷疑的國中生
  • **
  • 文章數: 45
    • 檢視個人資料
C逗號和分號差異
« 於: 2010-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嗎?


洋蔥叔叔

  • 榮譽博士
  • 鑽研的研究生
  • *****
  • 文章數: 830
    • 檢視個人資料
    • 洋蔥叔叔的隨意漫談電腦、網路、.NET、軟體本地化、雜七雜八
回覆: C逗號和分號差異
« 回覆 #1 於: 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);

ub901

  • 懷疑的國中生
  • **
  • 文章數: 45
    • 檢視個人資料
回覆: C逗號和分號差異
« 回覆 #2 於: 2010-10-15 14:55 »
再請問一下前輩,
這樣的話是我寫程式的方法不正確嗎?!
因為我都沒想到用大括弧 :(

洋蔥叔叔

  • 榮譽博士
  • 鑽研的研究生
  • *****
  • 文章數: 830
    • 檢視個人資料
    • 洋蔥叔叔的隨意漫談電腦、網路、.NET、軟體本地化、雜七雜八
回覆: C逗號和分號差異
« 回覆 #3 於: 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);

ub901

  • 懷疑的國中生
  • **
  • 文章數: 45
    • 檢視個人資料
回覆: C逗號和分號差異
« 回覆 #4 於: 2010-10-15 17:27 »
嗯嗯
感謝前輩們的指導
這部份我會在注意的
謝謝!!!! :)