2013-10-20 80 views
0

我在我的程序中有一个for循环。它看起来就像这样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个重置为0,达到50这一切后,但是当我打印出来,正只得到重置一次。是什么赋予了?

+2

在'我'等于51的脑袋里做数学运算。在循环的第一行之后会有什么'n'?它会通过'if'条件吗?那之后它的价值是什么? – Mat

回答

1

如果该计划具有N重置为0,达到50后,然后将其重置为0,而不是减去50:

if(n >= 50) 
    n = 0; 
1

试试这个

if(n >= 50) 
     n = 0; 

重置n0达到50后。

+1

是的,这是更清洁。 – 2013-10-20 07:53:33

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 

怎么办?

只需将其重置为,而不是去除它50或n-= i*2(这是有趣的写,因为i*2n,所以根本就n = 0

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


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

关于你的评论,您必须将状态改为:

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

+3

就是这样'¯\ _(ツ)_ /¯'!! –

+1

@GrijeshChauhan大声笑..你还记得这个 – Maroun

+1

是的:),添加[**这个工作代码**](http://codepad.org/mqtaq7O6),显示,每次执行'i> = 25'检查 –

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

OR

你可以只用

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

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

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