\t (Horizontal Tab) 不是固定 8 格,是「跳到下一個製表位」
核心規則
- 製表位:通常每 8 列為一個製表位 (第 1, 9, 17, 25... 列,0-based 為 0, 8, 16...)。
- 動作:輸出
\t 時,光標移動到下一個製表位。
- 當前位置相關:從當前列跳轉,而非從行首固定跳 8 格。
示例演示
printf("a\tb\n"); // a 在第0列,\t 跳到第8列 → "a b"
printf("ab\tc\n"); // ab 佔0-1列,\t 跳到第8列 → "ab c"
printf("abcdefgh\tij\n"); // 佔0-7列,\t 跳到第16列 → "abcdefgh ij"
printf("123456789\tX\n"); // 佔0-8列,\t 跳到第16列 → "123456789 X"
常見誤區
- 以為固定 8 空格:只在行首或剛好對齊製表位時表現為 8 空格。
- 跨平台對齊不一致:終端/編輯器製表寬度可配置 (4/8/其他),不要用 \t 做精確列對齊。
- 中文字符寬度:中文佔 2 列,
\t 計算基於列號而非字符數,混合中英文更難對齊。
最佳實踐:精確對齊用定寬格式
// 對齊輸出:姓名左對齊15列,年齡右對齊3列
printf("%-15s %3d\n", "Zhang San", 25);
printf("%-15s %3d\n", "Li", 30);
// 輸出:
// Zhang San 25
// Li 30
其他常用轉義字符
| 轉義符 | 含義 | ASCII碼 |
\n | 換行 | 10 (0x0A) |
\r | 回車 | 13 (0x0D) |
\t | 水平製表 | 9 (0x09) |
\v | 垂直製表 | 11 (0x0B) |
\b | 退格 | 8 (0x08) |
\f | 換頁 | 12 (0x0C) |
\\ | 反斜槓 | 92 (0x5C) |
\' | 單引號 | 39 (0x27) |
\" | 雙引號 | 34 (0x22) |
\0 | 空字符 | 0 (0x00) |