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

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

如果你想让它从100循环到0,那么在循环的第二个条件中i >= 0 0。

那,正如其他人所指出的,你需要将你的i的定义更改为有符号整数(只是int ),因为当计数器意味着-1时,它将是一些其他正数,因为你声明它是unsigned int

由于i是无符号的,它永远不会小于零。 丢弃unsigned 。 另外,交换<= for >=

由于i是无符号的,因此表达式i <= 0是可疑的并且等同于i == 0

并且代码不会打印任何内容,因为条件i <= 0在其第一次评估时为false。

如果代码不应该做任何事情,那么它没有任何问题。

假设您希望它将循环索引i从100打印到1,则需要将i <= 0更改为i > 0

因为它是一个无符号的int,你不能使用i >= 0因为这会导致它无限循环。

循环检查i <= 0;

i永远不会低于或等于零。 它的初始值是100。

从技术上讲,该代码没有任何问题。 i <= 0的测试很奇怪,因为我是无符号的,但它在技术上是有效的,当i为0时为true,否则为false。 在你的情况下,我从来没有碰巧是0。

我怀疑你的意思是i > 0

<= 0也许? 因为它从一开始就是false

对于循环

  • init:i = 100
  • test:i <= 0 //第一次传球时假

将测试更改为i > 0 (100次)

i >= 0 (101次)以及signed int i;的声明signed int i; 所以它实际上减少到-1。 unsigned int将从0到max-int(溢出)。

如果您希望它打印从100到0的所有数字,那么您需要

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

你的循环第一次在原始代码中运行时,我是100.测试’100 <= 0'失败,因此没有显示任何内容。