geekdoc-python-zh/docs/overiq/029.md

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型的数值从-3276832767不等。如果你试图将i的值增加到32767之外,它会向负面发展,这个过程会无限期地重复下去。因此条件(i < 32768)将永远是真的。

例 2:

int i = 1;

while(i<10)
{
    printf("%d\n", i); 
}

这里我们不更新i的值。所以每次迭代后i的值保持不变。因此,条件(i<10)永远是真的。为使循环正常工作,在printf()语句后添加i++;

永远记住,在 whiledo 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.9999993.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 循环中,我们没有更新该值。因此,它将无限期地继续执行。