0

我的程序中有一个 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; 
}

计划只是在 n 达到 50 后将其重置为 0。仅此而已,但是当我打印出来时, n 只会重置一次。是什么赋予了?

4

4 回答 4

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,所以简单地做n = 0

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


编辑:(如果我真的理解你的意思..)

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

if(n % 50 == 0)
     n = 0;

于 2013-10-20T07:47:03.587 回答
1

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

if(n >= 50)
    n = 0;
于 2013-10-20T07:46:14.977 回答
1

尝试这个

 if(n >= 50)
      n = 0;  

n达到0后重置50

于 2013-10-20T07:46:27.847 回答
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); 
于 2013-10-20T07:49:10.463 回答