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` 關閉展開,或程序中手動展開為空格
常見應用場景
| 場景 | 代碼示例 | 效果 |
| 表格列對齊 | `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);` | 精確控制,不依賴終端 |
進階:手動實現精確對齊 (不依賴 \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
*/
}
轉義序列速查表
| 序列 | 名稱 | ASCII | 用途 |
| `\t` | 水平制表 | 0x09 (9) | 欄對齊 |
| `\n` | 換行 | 0x0A (10) | 新行 |
| `\r` | 回車 | 0x0D (13) | 行首 |
| `\v` | 垂直制表 | 0x0B (11) | 紙帶/舊打印機 |
| `\f` | 換頁 | 0x0C (12) | 新頁 |
| `\\` | 反斜杠 | 0x5C (92) | 輸出 \ |
| `\"` | 雙引號 | 0x22 (34) | 字符串內輸出 " |
| `\'` | 單引號 | 0x27 (39) | 字符常量內輸出 ' |
- 上一篇文章: 嚴禁提供木馬代碼:C 語言惡意代碼分析與防範、合法安全研究路徑
- 下一篇文章: 全國計算機二級 C 語言上機考試環境:Visual C++ 6.0 英文版配置指南
Copyright ©
程式碼之家 All Rights Reserved