You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中括号对程序流程有何影响?加if分支括号后循环卡死

问题诊断

你的代码出现死循环完全是书写时的逻辑疏漏导致,和C语言循环、分支的大括号使用规则无关,C语言的大括号规则统一为:大括号包裹的所有内容会作为一个复合语句,成为对应分支/循环的执行体,没有特殊例外。

问题出在i++语句的作用范围上:

  • 原始示例代码中,i++是while循环体的内容,和if/else分支平级,不管每次循环走哪个分支,最终都会执行i++,i会从0逐步递增到21,正常退出循环。
  • 你修改后的代码错误地将i++包进了else分支的大括号内,只有当i为奇数时才会执行i++;一旦i为偶数(比如初始值i=0就是偶数),会进入if或else if分支,执行完计算逻辑后不会触发i++,i的值永远停留在偶数,永远满足i<=20的循环条件,程序就会卡死在循环中。
修复方案

将i++从else分支的大括号中移出,放在while循环体内、所有分支判断的外层即可,修复后代码参考:

int i = 0 , value = 0; 

while (i<=20) {
    if(i%2 == 0 && i <= 10) {
        value += i*i;
    }
    else if ( i % 2 == 0 && i > 10) {
        value += i;
    }
    else {
        value -= i;
    }
    i++; // 每次循环必执行,保证i正常递增
}       
printf("%d", value); 

内容的提问来源于stack exchange,提问作者Salad Potato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:36:03