unsigned int i;
for (i = 100; i <= 0; --i)
printf("%d\n",i);
答案 0 :(得分:11)
如果你想让它从100循环到0,那么循环中的第二个条件应该是i >= 0
。
那,正如其他人所指出的那样,您需要将i
的定义更改为有符号整数(仅int
),因为当计数器为-1时,它将是一些其他正数,因为您将其声明为unsigned int
。
答案 1 :(得分:10)
由于i
是无符号的,因此永远不会小于零。删除unsigned
。另外,将<=
替换为>=
。
答案 2 :(得分:7)
由于i
是未签名的,因此表达式i <= 0
是可疑的,相当于i == 0
。
代码不会打印任何内容,因为条件i <= 0
在第一次评估时是错误的。
答案 3 :(得分:4)
如果代码什么也不做,那就没问题了。
假设您希望它将循环索引i
从100打印到1,您需要将i <= 0
更改为i > 0
。
因为它是无符号整数,所以你不能使用i >= 0
因为这会导致它无限循环。
答案 4 :(得分:2)
&lt; = 0也许?因为从一开始就是false
For loop
将测试更改为i > 0
(100次)
或i >= 0
(101次)与声明signed int i;
一起使其实际减少到-1。 unsigned int将从0到max-int(溢出)。
答案 5 :(得分:2)
循环检查i <= 0;
i
永远不会小于或等于零。它的初始值是100。
答案 6 :(得分:2)
从技术上讲,该代码没有任何问题。 i <= 0的测试很奇怪,因为我是无符号的,但它在技术上是有效的,当我为0时为真,否则为假。在你的情况下,我从来没有碰巧是0。
答案 7 :(得分:2)
我怀疑你的意思是i > 0
。
答案 8 :(得分:0)
如果您希望它将所有数字从100打印到0,那么您需要
unsigned int i;
for (i = 100; i >= 0; --i)
printf("%d\n",i);
您的循环第一次在原始代码中运行时,我是100.测试'100&lt; = 0'失败,因此没有显示任何内容。