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

C語言字符處理程序解析:switch條件與字符偏移輸出邏輯

     編輯:C 語言問答

原始代碼


#include 
main() {
    int c;
    while((c=getchar())!='\n') {
        switch(c-'2') {
            case 0: case 1: putchar(c+4);
            case 2: putchar(c+4); break;
            case 3: putchar(c+3);
            case 4: putchar(c+2); break;
        }
    }
}

邏輯逐步分析

  1. 輸入循環:getchar() 讀取字符直到換行符 \n,c 保存字符的 ASCII 值。
  2. Switch 判斷值:c - '2'(即 c - 50)。根據輸入字符不同,進入不同 case:
輸入字符ASCIIc-'2'匹配 case執行輸出輸出字符
'0'(48)48-2無無無
'1'(49)49-1無無無
'2'(50)500case 0,1 → putchar(c+4) → '6'
case 2 → putchar(c+4) → '6' break
'6''6'
'3'(51)511case 0,1 → putchar(c+4) → '7'
case 2 → putchar(c+4) → '7' break
'7''7'
'4'(52)522case 2 → putchar(c+4) → '8' break'8'
'5'(53)533case 3 → putchar(c+3) → '8'
case 4 → putchar(c+2) → '7' break
'8''7'
'6'(54)544case 4 → putchar(c+2) → '8' break'8'
'7'(55)555無無

關鍵機制:Case 穿透

  • case 0: 無 break,直接落入 case 1 再落入 case 2,直到遇到 break。
  • case 3: 無 break,落入 case 4 執行後 break。

程序整體行為

對輸入行中的每個字符,若為 '2'..'6' 則輸出 1-2 個偏移後的字符,其他字符被忽略(無輸出)。

改進建議

  • 添加 default: 顯式處理非預期輸入(如不輸出或報錯)。
  • 用 if-else 或查表法替代複雜 switch 穿透,提升可讀性。
  • 注意 putchar 參數為 int,傳入 c+4 等整數表達式正確。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved