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
相关产品推荐
相关产品推荐

