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

C語言打印 ASCII 碼表:遞歸、迭代與格式化三種實現

     編輯:C 語言問答

需求

打印 0~255 所有 ASCII 碼及其對應字符(控制字符顯示 `.`)。

方案一:標準 for 迴圈(推薦)

#include 
#include 

int main() {
    printf("Dec  Hex  Char\n");
    printf("---------------\n");
    for (int i = 0; i <= 255; i++) {
        char display = isprint(i) ? (char)i : '.';
        printf("%3d  0x%02X  %c\n", i, i, display);
        if (i % 16 == 15) puts(""); // 每 16 行分組
    }
    return 0;
}

方案二:遞歸實現(教學展示遞歸結構)


void print_ascii_rec(int i) {
    if (i > 255) return;
    char display = isprint(i) ? (char)i : '.';
    printf("%3d  0x%02X  %c%s", i, i, display, (i % 16 == 15) ? "\n" : "  ");
    print_ascii_rec(i + 1);
}

int main() {
    print_ascii_rec(0);
    return 0;
}

⚠️ 遞歸深度 256 安全(棧幀極小),但**無任何優勢**,純教學用。

方案三:while 迴圈 + 位運算分組


int main() {
    int i = 0;
    while (i <= 255) {
        for (int col = 0; col < 16 && i <= 255; col++, i++) {
            char c = (i >= 32 && i <= 126) ? i : '.';
            printf("%3d:%c ", i, c);
        }
        puts("");
    }
    return 0;
}

ASCII 碼關鍵區間速查

範圍類別典型字符
0-31控制字符NUL(0), LF(10), CR(13), ESC(27)
32空格' '
33-47標點符號! " # $ % & ' ( ) * + , - . /
48-57數字0-9
58-64標點符號: ; < = > ? @
65-90大寫字母A-Z
91-96標點符號[ \ ] ^ _ `
97-122小寫字母a-z
123-126標點符號{ | } ~
127DEL刪除
128-255擴展 ASCII視編碼而定 (Latin-1/CP437/GBK...)

進階:生成完整 HTML 實體參考表


void gen_html_entity_table() {
    puts("");
    for (int i = 0; i <= 255; i++) {
        const char *entity;
        switch (i) {
            case 34: entity = """; break;
            case 38: entity = "&"; break;
            case 60: entity = "<"; break;
            case 62: entity = ">"; break;
            case 160: entity = " "; break;
            default: entity = (i >= 32 && i <= 126) ? "—" : "—";
        }
        char display = (i >= 32 && i <= 126) ? i : ' ';
        printf("\n", i, i, display, entity);
    }
    puts("
DecHexCharEntity
%d0x%02X%c%s
"); }

總結

  • **生產代碼用 for 迴圈**:簡潔、高效、無棧溢出風險。
  • **遞歸僅供教學** 理解遞歸終止條件、參數傳遞、棧幀。
  • isprint() (需 ctype.h) 判斷可打印字符,**避免控制字符亂碼/終端異常**。
  • 格式化輸出 %3d 0x%02X %c 對齊美觀,每 16 行換行對應十六進制直觀。
  • 擴展 ASCII (128-255) 依賴終端編碼設置,跨平台顯示可能不一致。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved