int c = fgetc(f);
while (c != EOF) {
printf("%d ", c); // 輸出 48 32 49 32 ... (ASCII 碼)
c = fgetc(f);
}
檔案內容 0 1 2 2 0,輸出為對應 ASCII 值:'0'=48, ' '=32, '1'=49, '2'=50。
| 概念 | 說明 |
|---|---|
fgetc 回傳 int | 需用 int 接收,以容納 EOF (通常為 -1),char 可能截斷 |
| 字元 vs ASCII | 讀取文字檔實際讀到的是字元編碼值 (ASCII/UTF-8 位元組) |
| 列印字元 | printf("%c", c) 列印字元;printf("%d", c) 列印編碼值 |
int i;
i = (int)c; // C89 不支援這種轉型語法?實際上合法,可能是其他語法錯誤
// 正確寫法
i = (int)c; // C 標準允許
// 或直接用
int i = c; // 隱式轉型
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *f = fopen("data.txt", "r");
if (!f) { perror("開檔失敗"); return 1; }
int c;
while ((c = fgetc(f)) != EOF) {
// 同時顯示字元與編碼
printf("字元: '%c' (ASCII: %d)\n", c, c);
}
fclose(f);
return 0;
}
fopen_s 與 errno_tFILE *f;
errno_t err = fopen_s(&f, "data.txt", "r");
if (err) { printf("錯誤碼: %d\n", err); return 1; }
fgetc 只能得單一位元組iconv、ICU 或平台 API