C++代码while条件写i=30触发死循环的执行原理是什么?
C++代码无限循环问题原因解析
你遇到的是典型的赋值表达式误用为判断条件错误,while (i = 30)的具体执行逻辑如下:
- C中赋值表达式的返回值为完成赋值后左侧变量的值,此处
i=30的返回值固定为30,而C中非0整数会被隐式转换为布尔值true,因此该判断条件永远成立 - 每次执行循环体前都会先运行
while后的条件语句:你在循环体中虽然执行了i = i+1将i变为31,但下一次进入条件判断时,i=30会再次把i重置为30,永远无法触发条件为假的退出逻辑,因此程序会一直循环输出30
你原本计划写的i <= 30是比较表达式,仅会对i的当前值做大小判断、不会修改i本身的值,当i累加超过30时就会返回false正常退出循环。
相关代码完整复现:
#include <iostream> using namespace std; int main() { int i=30;//initialization while (i =30) { cout<< i<< ' '; i=i+1; } }
小提示:为了避免这类笔误,部分开发者会把常量写在比较运算符左侧,例如写成
30 <= i,如果误写为30 = i编译器会直接报错,能提前发现问题。
内容的提问来源于stack exchange,提问作者Tejas Aditya
相关产品推荐
相关产品推荐

