首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言 switch 穿透特性詳解:輸入 China# 統計字符出現次數

     編輯:程式設計綜合問答

代碼還原

#include 
void main() {
    int v1=0, v2=0;
    char ch;
    while((ch=getchar()) != '#') {
        switch(ch) {
            case 'a':
            case 'h':
            default: v1++;
            case 'o': v2++;
        }
    }
    printf("%d,%d\n", v1, v2);
}

執行流程圖解

輸入 China#,逐字符處理:

字符匹配 case執行語句v1 變化v2 變化
Cdefaultv1++; 穿透→case 'o': v2++11
hcase 'h'v1++; 穿透→default: v1++; 穿透→case 'o': v2+++2=3+1=2
idefaultv1++; 穿透→case 'o': v2++43
ndefaultv1++; 穿透→case 'o': v2++54
acase 'a'v1++; 穿透→case 'h': v1++; 穿透→default: v1++; 穿透→case 'o': v2+++3=8+1=5

最終輸出:8,5

核心知識點

  1. switch 穿透:無 break 時,匹配 case 後順序執行後續所有 case/default 語句,直到遇到 break 或 switch 結束。
  2. default 位置不影響邏輯:放在中間同樣會被穿透執行。
  3. 統計邏輯:v1 統計非 'o' 字符(每字符至少 +1),v2 統計 'o' 字符(每字符 +1),'o' 字符會導致 v1 也 +1(因穿透執行 default)。

修正建議

若需互斥統計,每個 case 必須加 break;或改用 if-else 結構更清晰。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved