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

C 語言制表符 \t 詳解:對齊輸出、字符串格式化與實戰示例

     編輯:C 語言問答

C 語言制表符 \t 詳解:對齊輸出、字符串格式化與實戰示例

`\t` (Horizontal Tab, HT) 將光標移動到下一個制表位,通常每 8 字符一個制表位 (列號 0, 8, 16, 24...),實現欄對齊。

核心行為演示


#include <stdio.h>

int main() {
    /* 無 \t:左對齊但列不齊 */
    printf("%s%d\n", "a", 1112);
    printf("%s%d\n", "aaa", 1113);
    /* 輸出:
    a1112
    aaa1113
    */

    /* 有 \t:自動對齊到下一制表位 */
    printf("%s\t%d\n", "a", 1112);
    printf("%s\t%d\n", "aaa", 1113);
    /* 輸出:
    a       1112
    aaa     1113
    */
    return 0;
}

制表位機制詳解

  • 終端/控制台維護虛擬制表位,默認間隔 8 列
  • `\t` 不輸出固定空格數,而是跳轉到下一個 8 的倍數列
  • 例如:列 0→8、列 3→8、列 9→16、列 15→16
  • 可通過 `stty tab0` 關閉展開,或程序中手動展開為空格

常見應用場景

進階:手動實現精確對齊 (不依賴 \t)


void print_aligned(const char *label, int value, int label_width) {
    printf("%-*s %d\n", label_width, label, value);  // %-寬度 左對齊
}

int main() {
    print_aligned("Name", 1112, 10);
    print_aligned("LongerName", 1113, 10);
    /* 輸出:
    Name        1112
    LongerName  1113
    */
}

轉義序列速查表

場景代碼示例效果
表格列對齊`printf("%-10s\t%d\t%.2f\n", name, age, score);`粗略對齊,終端友好
調試輸出`printf("x=%d\ty=%d\tz=%d\n", x, y, z);`快速欄分隔
CSV/TSV 生成`fprintf(fp, "%s\t%d\t%s\n", col1, col2, col3);`製表符分隔值 (TSV)
手動展開為空格`int spaces = 8 - (pos % 8);`精確控制,不依賴終端
序列名稱ASCII用途
`\t`水平制表0x09 (9)欄對齊
`\n`換行0x0A (10)新行
`\r`回車0x0D (13)行首
`\v`垂直制表0x0B (11)紙帶/舊打印機
`\f`換頁0x0C (12)新頁
`\\`反斜杠0x5C (92)輸出 \
`\"`雙引號0x22 (34)字符串內輸出 "
`\'`單引號0x27 (39)字符常量內輸出 '
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved