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

C 語言 switch 穿透現象:case 缺少 break 導致連續輸出 65、64

     編輯:程式設計疑難解答

代碼還原

int s; scanf("%d",&s);
while (s>0) {
    switch(s) {
        case 1: printf("%d", s+5);      // 無 break
        case 2: printf("%d", s+4); break;
        case 3: printf("%d", s+3);      // 無 break
        default: printf("%d", s+1); break;
    }
    scanf("%d",&s);
}

輸入 1 → 輸出 65 原因

  1. 匹配 case 1:printf("%d", 6) 輸出 6。
  2. 無 break,**穿透** 到 case 2:printf("%d", 5) 輸出 5。
  3. case 2 有 break,跳出 switch。
  4. 無換行符,控制台顯示 65。

輸入 3 → 輸出 64 原因

  1. case 3:printf("%d", 6) 輸出 6。
  2. 穿透 default:printf("%d", 4) 輸出 4。
  3. 顯示 64。

修正

case 1: printf("%d", s+5); break;   // 加 break
case 3: printf("%d", s+3); break;   // 加 break

或有意穿透時加註釋 /* falls through */ 供靜態分析工具識別。

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