为什么“for(i = 100; i< = 0; --i)”永远循环?

时间:2011-01-24 23:14:31

标签: c++ c loops comparison unsigned

unsigned int i;
for (i = 100; i <= 0; --i)
    printf("%d\n",i);

9 个答案:

答案 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

  • init:i = 100
  • 测试:i&lt; = 0 //第一次通过时出现错误

将测试更改为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'失败,因此没有显示任何内容。