言 if-else 和循環(huán):那些老師沒講透的細(xì)節(jié)》)
你有沒有遇到過這種情況代碼寫得看著沒問題一運(yùn)行結(jié)果就不對(duì)調(diào)試半天最后發(fā)現(xiàn)是 else 跟錯(cuò)了 if…… 今天就把 C 語(yǔ)言分支和循環(huán)里最容易踩的 4 個(gè)坑一次性講清楚。一、else 到底跟誰(shuí)—— 就近原則就近原則 → “else 就像個(gè)找搭檔的人誰(shuí)離它最近就跟誰(shuí)走”如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很明顯這個(gè)else與第二個(gè)if搭配在一起這時(shí)如果想讓else與第一個(gè)if在一起就需要把第二個(gè)if套起來如圖這時(shí)候else與第一個(gè)if連用b2時(shí)依舊打印haha)**二、if 只管 “一句話”—— 大括號(hào)的重要性如int main(){int score 0;scanf(“%d”, score);if (score 60)printf(“拿捏拿捏\n”);printf(“慶祝一下\n”);return 0;}*很明顯無論score是多少都會(huì)輸出慶祝一下由此得出if和else只控制一句同上如果想要兩句話都控制加{}即可三、算到一半就不算了—— 短路求值由于左邊的式子為’假‘使得右邊的式子不求值短路求值 → “就像你查成績(jī)第一科就掛了后面幾科不用看也知道總評(píng)過不了”首先需要了解前置和后置的區(qū)別如果為a則式子先讀取a本身的值然后再使得aa1那么a就是先讓a自身加1后再讀取a的值三個(gè)操作符為取反為并且||為或者當(dāng)ab時(shí) a,b只要有一個(gè)為’假‘則整個(gè)式子都假而當(dāng)a||b時(shí) a,b有一個(gè)為’真‘即可那么下列代碼可解釋短路求值int main()//測(cè)試短路求值{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 而其他值不變 正是因?yàn)閍為’假’使得式子都是‘假’相同原理 如果是a 則所有值都會(huì)發(fā)生變化***四、break 和 continue一個(gè)退學(xué)一個(gè)休學(xué)break vs continue → “break 是直接退學(xué)continue 是這學(xué)期掛了但下學(xué)期接著讀”這里只拿一個(gè)簡(jiǎn)單的for循環(huán)來舉例int main(){int i 0;for (i 1;i 10;i) {if (i 5)continue;printf(%d , i);}return 0;}***這是一個(gè)簡(jiǎn)單的輸出1-10的數(shù)字 中間在5的時(shí)候添加continue 此刻輸出只是在5處出現(xiàn)了作用而把continue換break 即int main(){int i 0;for (i 1;i 10;i) {if (i 5)break;printf(%d , i);}return 0;}輸出為很明顯這個(gè)break直接在5處進(jìn)行了終止作用于該處和往后的所有 這樣兩者區(qū)別就顯而易見了??偨Y(jié)一下else 找最近的 if、if 只管一句記得加 {}、 和 || 會(huì)偷懶、break 直接走 continue 跳過本次。下次寫代碼多留意這幾點(diǎn)bug 少一半