| 函數 | 功能 | 參數/返回值 | 典型用法 |
|---|---|---|---|
| printf | 格式化輸出 | 返回輸出字符數 | printf("%d %s", n, str); |
| scanf | 格式化輸入 | 返回成功匹配項數 | scanf("%d", &n); |
| getchar | 讀取單字符 | 返回 int (含 EOF) | ch = getchar(); |
| putchar | 輸出單字符 | 返回輸出字符 | putchar('\n'); |
| gets | 讀取一行(危險) | 返回字符串指針 | 已棄用,勿用 |
| puts | 輸出字符串+換行 | 成功非負,失敗 EOF | puts("Hello"); |
| 常量 | 定義位置 | 值/含義 | 用途 |
|---|---|---|---|
| NUL | 字符集標準 | 字符 '\0' (ASCII 0) | 字符串結束標記 |
| NULL | stdio.h 等 | 空指針常量 ((void*)0) | 指針初始化/判空 |
| EOF | stdio.h | 通常為 -1 (int) | 文件結束/錯誤標記 |
關鍵點:getchar() 返回 int 而非 char,為了容納 EOF(-1);字符串結束是 NUL('\0') 而非 NULL。
// 冗餘版
ch = getchar();
while (ch != EOF && ch != '\n') {
ch = getchar();
}
// 緊湊版(大牛風格)
while ((ch = getchar()) != EOF && ch != '\n')
; // 空循環體,分號不可省
// 讀入字符串到固定緩衝區
int i = 0;
while ((ch = getchar()) != EOF && ch != '\n') {
if (i < MAX-1) buf[i++] = ch; // 留位置給 \0
}
buf[i] = '\0';
#include
#define MAX_LINE 1024
int main() {
char line[MAX_LINE];
int ch, i = 0;
// 安全讀取一行
while ((ch = getchar()) != EOF && ch != '\n') {
if (i < MAX_LINE - 1) line[i++] = ch;
}
line[i] = '\0';
// 處理邏輯...
printf("Read: %s\n", line);
return 0;
}
第一章雖名「快速上手」,實則奠定了 C 語言 I/O、常量、錯誤避免、編碼風格的基石。掌握 `getchar`/`putchar` 底層字符處理、理解 `scanf`/`printf` 格式串陷阱、養成「先檢查再使用」的防禦性編程習慣,是寫出健壯 C 代碼的關鍵。