if (ch != '\032' && ch != '\r') { ... }
'\032':八進位 32 = 十進位 26 = 0x1A = Ctrl+Z,在 Windows/DOS 文字模式下代表 EOF (End of File)。'\r':Carriage Return (CR),ASCII 13,Windows 換行序列 \r\n 的第一個字元。讀取文字檔時,過濾掉 EOF 標記與 CR 字元,避免它們進入後續邏輯(如字元計數、字串組裝)。
Ctrl+Z 或單獨 \r(如 Unix 檔案僅 \n),條件永真,行為無差異。Ctrl+Z;檔案若以二進位模式開啟 ("rb") 則不會自動轉換 \r\n。// 讀取文字檔,標準 C 方式
FILE* fp = fopen("test.txt", "r"); // 文字模式,自動處理 \r\n -> \n
int ch;
while ((ch = fgetc(fp)) != EOF) { // EOF 是 -1,非字元 '\032'
if (ch != '\r') { /* 處理 */ }
}
fclose(fp);
fgetc 回傳 int,直接比對巨集 EOF(通常為 -1),勿自行比對 '\032'。\r\n 轉為 \n,通常不需手動濾 \r;若跨平台讀取舊版 Mac (\r) 或 Windows (\r\n) 檔案,可保留濾除邏輯。建立含 Ctrl+Z 與單獨 \r 的測試檔:
echo -ne "abc\rdef\x1Aghi" > test.txt
執行原程式觀察輸出差異。