2014-08-31 76 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已修复!