C语言循环何时产生无限结果?为何这段代码会无限运行?
为什么这段C代码会进入无限循环?
首先看你的代码,核心问题出在while循环的条件设置上:
#include<stdio.h> // 注:你原代码漏了开头的#,正确写法是#include<stdio.h> int main(){ int i = 1; while(1) // 此处条件是常量1,永远被视为“真” { printf("%d\n",i); // 修正了换行符的写法 --i; } }
你误解了循环终止的逻辑:
你以为--i让i变为0时循环会结束,但实际上while(1)的判断对象是常量1,它永远为真,根本不会去检查i的值。不管i怎么变化,这个循环的条件都不会转为假,因此会无限执行下去。
C语言中循环产生无限结果的常见场景:
- 循环条件是永远为真的常量(比如
while(1)、for(;;)),且循环内部没有break、return这类主动终止语句。 - 循环变量的变化方向完全偏离终止条件:比如想让i递增到10时终止,却写了
while(i<10) {--i;},i只会越来越小,永远满足i<10。 - 整数溢出导致变量值循环:比如unsigned int类型的i从0递减,会溢出到类型最大值,永远不会变成负数,若循环条件是
i>=0就会无限循环。
如果想让代码在i从1递减到0时终止,应该把循环条件改成检查i的取值:
#include<stdio.h> int main(){ int i = 1; while(i > 0) // 当i大于0时执行循环 { printf("%d\n",i); --i; } }
这样代码会打印1,随后i变为0,循环条件i>0为假,循环正常终止。
内容的提问来源于stack exchange,提问作者Arpit Upadhyay
相关产品推荐
相关产品推荐

