2014-08-31 105 views
-4

由於某種原因,我無法運行下面的代碼。嘗試了幾個編譯器進行調試,但沒有運氣。C代碼和bug識別

#include <stdio.h> 

void main() 
{ 
    int mul5=0, mul3=0, final=0; 
    int i=1; 

    while (i<10){ 
     if (i % 3 == 0) 
      mul3=mul3+i; 
     else if (i%5==0) 
      mul5=mul5+i; 
     else 
      i++; 
    } 

    final = mul3 + mul5; 
    printf("%d\n", final); 
} 

已經嘗試過void作爲返回類型爲main,並用0

+1

你谷歌的錯誤信息,並找出它的含義。 – djechlin 2014-08-31 12:56:35

+0

我沒有得到消息,因爲即時消息使用記事本++的插件,編譯器不顯示消息錯誤(另一個問題) – user3443891 2014-08-31 12:57:41

+0

@djechlin:應該很明顯,沒有錯誤消息。代碼將永遠運行,永遠不會打印任何東西。 – gnasher729 2014-08-31 12:59:02

回答

4

返回一個int返回類型有三種情況:ⅰ%3 = 0,則i%3 = 0和I! %5 = 0,以及i%3和i%5都不爲0的第三種情況。

在這三種情況中的哪一種情況下,我增加了1?

在這三種情況下,您希望將i增加1嗎?

PS。你的代碼非常簡單,所以很容易找出問題所在。然而,你真的應該告訴究竟是究竟發生了什麼。請記住,我們離你的計算機很遠,看不到它在做什麼,而且我們也無法讀懂你的想法。通常您只需回答以下問題:

a。你在做什麼。 b。你希望發生什麼? c。什麼確實發生。

+0

之後的三個檢查。這意味着在每個循環中 – user3443891 2014-08-31 13:01:02

+0

這是第二個回答的問題。現在回答第一個問題。 – gnasher729 2014-08-31 13:05:28

0

代碼中的問題是,當ifelse if條件爲真時,您不會遞增i的值。 這就是爲什麼while循環運行無限次。

#include <stdio.h> 
int main() 
{ 
    int mul5=0, mul3=0, final=0; 
    int i=1; 
    while (i<10) 
    { 
     if (i % 3 == 0) //When this condition is true i should also be incremented 
     { 
      mul3=mul3+i; 
      i++; 
     } 
     else if (i%5==0)//When this condition is true i should also be incremented 
     { 
      mul5=mul5+i; 
      i++; 
     } 
     else 
      i++; //Increment i when it is not increment in if and else if condition 
    } 
    final = mul3 + mul5; 
    printf("%d\n", final); 
    return 0; 
} 
0

您的代碼中有一個無限循環。

什麼情況是,當循環開始執行爲3分的條件之一,即,
1. mul3值將增加
2的mul5值將增加
3. i將遞增

當循環開始時,i爲1.由於i%3==0i%5==0爲false,所以i遞增。當i是2時也是如此。但是當i是3,i%3==0是正確的。所以mul3將會增加,因此另外兩個條件被跳過。從那時起,i將不會改變,從而導致無限循環。

要使while循環結束,必須在每個循環後遞增i。所以你所要做的就是刪除i++;之前的else,然後瞧!你的bug已修復!