初學 C 語言時,最容易混淆的概念莫過於 EOF 與 \n。兩者本質完全不同,混用會導致邏輯錯誤。
| 項目 | EOF | \n (換行符) |
|---|---|---|
| 類型 | 宏常量(通常為 -1) | 字符常量(ASCII 10) |
| 含義 | 表示「輸入流結束」,非實際字符 | 表示「換行」,是真實存在於輸入流中的字符 |
| 適用場景 | 檢測文件結束或標準輸入結束 | 判斷行結束、字符串分割 |
int c;
while ((c = getchar()) != EOF) {
putchar(c); // 處理每個字符,包含 \n
}
int x;
while (scanf("%d", &x) != EOF) {
// 成功讀取一個整數
}
注意:scanf 返回成功匹配的項數,輸入結束時返回 EOF(-1)。
if (c == EOF) 檢測單個字符(除非 c 是 int 且來自 getchar() 返回)。牢記:EOF 是狀態,\n 是數據。正確區分,輸入處理不再出錯。