我的程序中有一个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只会被重置一次。是什么赋予了?
答案 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*2
为n
而写起来很有趣,所以只需执行{ {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);