for循环中的指令只执行一次?

时间:2013-10-20 07:41:52

标签: c loops

我的程序中有一个for循环。它看起来就像这样

#include <stdio.h>
int main(){
    int n = 0;
    int i;
    for(i = 0; i < 100; i++){
        n = i*2;
        if(n >= 50)
            n-=50;

        printf("n is %d\n", n); 
    }
    return 0; 
}

计划只是在达到50之后将n重置为0.这就是全部,但是当我打印出来时,n只会被重置一次。是什么赋予了?

4 个答案:

答案 0 :(得分:7)

画一张桌子你会知道原因:

  i  |  n
-----+------
  0  |  0     n >= 50 ? No
  1  |  2     n >= 50 ? No
  2  |  4
  3  |  6
 ... | ...
  25 | 50     n >= 50 ? YES!
  25 |  0     n-=50
  26 | 52     n >= 50 ? YES!
  26 |  2     n-=50  → n will be 2 and NOT 0

怎么办?

只需将其重置为 0 ,而不是从中删除50或n-= i*2(由于i*2n而写起来很有趣,所以只需执行{ {1}})

提示:绘制表格很简单,但使用调试器要容易十倍。使用它。


编辑 :(如果我真的明白你的意思..)

关于您的评论,您必须将条件更改为:

n = 0

<击>

答案 1 :(得分:1)

如果计划在达到50之后将n重置为0,则将其重置为0而不是减去50:

if(n >= 50)
    n = 0;

答案 2 :(得分:1)

试试这个

 if(n >= 50)
      n = 0;  

n重置为0后重置为50

答案 3 :(得分:1)

因为你只是从n的当前值减去50。考虑一下:

When i = 25 your condition will reset n to 0
When i = 26 your condition will reset n to 2
When i = 27 your condition will reset n to 4
When i = 28 your condition will reset n to 6
and so on...

您只需将0分配给n而不是减去50。

您可以替换

if(n >= 50)
    n-=50;

printf("n is %d\n", n); 

只是

printf("n is %d\n", (n >= 50)?0:n);