#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 變化 |
|---|---|---|---|---|
| C | default | v1++; 穿透→case 'o': v2++ | 1 | 1 |
| h | case 'h' | v1++; 穿透→default: v1++; 穿透→case 'o': v2++ | +2=3 | +1=2 |
| i | default | v1++; 穿透→case 'o': v2++ | 4 | 3 |
| n | default | v1++; 穿透→case 'o': v2++ | 5 | 4 |
| a | case 'a' | v1++; 穿透→case 'h': v1++; 穿透→default: v1++; 穿透→case 'o': v2++ | +3=8 | +1=5 |
最終輸出:8,5
break 時,匹配 case 後順序執行後續所有 case/default 語句,直到遇到 break 或 switch 結束。v1 統計非 'o' 字符(每字符至少 +1),v2 統計 'o' 字符(每字符 +1),'o' 字符會導致 v1 也 +1(因穿透執行 default)。若需互斥統計,每個 case 必須加 break;或改用 if-else 結構更清晰。