unsigned int i;
for (i = 100; i <= 0; --i)
printf("%d\n",i);
unsigned int i;
for (i = 100; i <= 0; --i)
printf("%d\n",i);
如果想要循环从100到0,请在循环的第二个条件中使用i >= 0
。
此外,就像其他人指出的那样,您需要将定义的i
更改为有符号整数(只需使用int
),因为当计数器应为-1时,它将是某个其他正数,因为您将其声明为unsigned int
。
uint
大小。直至无穷大... - James因为 i
是无符号数,它永远不会小于零。 去掉unsigned
。另外,将<=
交换为>=
。
由于i
是无符号的,表达式i <= 0
是可疑的并且等同于i == 0
。
而且,由于条件i <= 0
在第一次评估时为假,所以代码不会打印任何内容。
如果代码没有任何作用,那么就没有问题。
假设你想让它从100打印循环索引i到1,你需要将i <= 0
改为i > 0
。
因为它是无符号整数,所以你不能使用i >= 0
,否则会导致它无限循环。
可能是 <= 0 吗?因为它从一开始就是 false
for 循环
将测试条件改为 i > 0
(循环100次)
或者使用声明 signed int i;
以及测试条件 i >= 0
(循环101次),这样它实际上会逐渐减少到 -1。无符号整数会从 0 增加到最大整数(溢出)。
i <= 0;
i
永远不会小于或等于零。它的初始值为100。
从技术上讲,这段代码没有问题。尽管 i 是无符号的,但测试 i <= 0 是合法的,当 i 为 0 时为 true,否则为 false。在您的情况下,i 永远不会是 0,所以这个条件判断实际上是多余的。
i>0
。unsigned int i;
for (i = 100; i >= 0; --i)
printf("%d\n",i);
在您的原始代码中,第一次循环运行时,i 的值为100。测试“100 <= 0”失败,因此没有任何内容显示。
i
被声明为无符号。请参见我的答案中的讨论。 - John