2.7 KiB
C 语言中的无限循环
原文:https://overiq.com/c-programming-101/the-infinite-loop-in-c/
最后更新于 2020 年 7 月 27 日
无限重复且永不终止的循环称为无限循环。
大多数时候,我们会错误地创建无限循环。然而,这并不意味着无限循环没有用。无限循环通常用于长时间运行直到像 web 服务器一样停止的程序。
在下面的例子中,我们演示了什么样的错误会导致无限循环:
例 1:
short int i;
for (i = 32765; i < 32768; i++)
{
printf("%d\n", i);
}
这个循环是一个无限循环。这是为什么?根据条件,循环将执行到(i < 32768)。最初,i的值是32765,每次迭代后,它的值由更新表达式(i++)递增。但是short int型的数值从-32768到32767不等。如果你试图将i的值增加到32767之外,它会向负面发展,这个过程会无限期地重复下去。因此条件(i < 32768)将永远是真的。
例 2:
int i = 1;
while(i<10)
{
printf("%d\n", i);
}
这里我们不更新i的值。所以每次迭代后i的值保持不变。因此,条件(i<10)永远是真的。为使循环正常工作,在printf()语句后添加i++;。
永远记住,在 while 和 do while loop 中比在 for loop 中更容易忘记更新表达式。
例 3:
导致无限循环的另一个常见错误是在需要等式运算符(==)的地方使用赋值运算符(=)。
int i = 1;
while(i=10)
{
printf("%d", i);
}
我们真正想要的是循环应该执行到i等于10。整个表达式(i=10)的值是10,因为非零值被认为是真的,所以条件总是真的,并且循环将继续无限期执行。要解决问题,请将表达式(i=10)替换为(i==10)。
例 4:
float f = 2;
while(f != 31.0)
{
printf("%f\n", f);
f += 0.1;
}
这个循环是无限的,因为计算机将浮点数表示为近似数,所以3.0可以存储为2.999999或3.00001。所以条件(f != 31.0)永远不会变成假的。要解决这个问题,请将条件写为f <= 31.0。
例 5:
int i = 0;
while(i<=5);
printf("%d\n", i);
这个循环将不会产生任何输出,并且将无限期地继续执行。仔细看看,注意 while 条件末尾的分号(;)。我们知道条件后的分号(;)是空语句。因此,该循环相当于以下内容:
int i = 0;
while(i<=5)
{
; // a null statement
}
printf("%d\n", i);
我们现在可以清楚地看到,如果i在 while 循环中,我们没有更新该值。因此,它将无限期地继续执行。