《C 语言 if-else 和循环:那些老师没讲透的细节》 你有没有遇到过这种情况代码写得看着没问题一运行结果就不对调试半天最后发现是 else 跟错了 if…… 今天就把 C 语言分支和循环里最容易踩的 4 个坑一次性讲清楚。一、else 到底跟谁—— 就近原则就近原则 → “else 就像个找搭档的人谁离它最近就跟谁走”如int main(){int a 0;int b 0;scanf(“%d %d”, a, b);if (a 1)if (b 2)printf(“hehe\n”);elseprintf(“haha\n”);return 0;}这段代码的输出图一输入1 2图二输入1 3很明显这个else与第二个if搭配在一起这时如果想让else与第一个if在一起就需要把第二个if套起来如图这时候else与第一个if连用b2时依旧打印haha)**二、if 只管 “一句话”—— 大括号的重要性如int main(){int score 0;scanf(“%d”, score);if (score 60)printf(“拿捏拿捏\n”);printf(“庆祝一下\n”);return 0;}*很明显无论score是多少都会输出庆祝一下由此得出if和else只控制一句同上如果想要两句话都控制加{}即可三、算到一半就不算了—— 短路求值由于左边的式子为’假‘使得右边的式子不求值短路求值 → “就像你查成绩第一科就挂了后面几科不用看也知道总评过不了”首先需要了解前置和后置的区别如果为a则式子先读取a本身的值然后再使得aa1那么a就是先让a自身加1后再读取a的值三个操作符为取反为并且||为或者当ab时 a,b只要有一个为’假‘则整个式子都假而当a||b时 a,b有一个为’真‘即可那么下列代码可解释短路求值int main()//测试短路求值{int i 0, a 0, b 2, c 3, d 4;i a b d;printf(“a%d\n b%d\n c%d\n d%d\n”, a,b,c,d);return 0;}我们输出一下显而易见只有a自己加1 而其他值不变 正是因为a为’假’使得式子都是‘假’相同原理 如果是a 则所有值都会发生变化***四、break 和 continue一个退学一个休学break vs continue → “break 是直接退学continue 是这学期挂了但下学期接着读”这里只拿一个简单的for循环来举例int main(){int i 0;for (i 1;i 10;i) {if (i 5)continue;printf(%d , i);}return 0;}***这是一个简单的输出1-10的数字 中间在5的时候添加continue 此刻输出只是在5处出现了作用而把continue换break 即int main(){int i 0;for (i 1;i 10;i) {if (i 5)break;printf(%d , i);}return 0;}输出为很明显这个break直接在5处进行了终止作用于该处和往后的所有 这样两者区别就显而易见了。总结一下else 找最近的 if、if 只管一句记得加 {}、 和 || 会偷懒、break 直接走 continue 跳过本次。下次写代码多留意这几点bug 少一半