成功打開文件(fopen())後,最基礎的操作是逐字符讀寫。標準庫提供兩組功能完全相同的函數:
int putc(int ch, FILE *fp)、int fputc(int ch, FILE *fp)int getc(FILE *fp)、int fgetc(FILE *fp)putc 通常實現為宏,fputc 為函數;現代編譯器下性能差異可忽略。成功返回寫入/讀取的字符(unsigned char 轉 int),失敗返回 EOF(-1)。
#include <stdio.h> #include <stdlib.h>
int main() {
FILE *fp = fopen("F:\\WEB\\TEST\\file_a.dat", "w");
if (!fp) { perror("fopen"); exit(EXIT_FAILURE); }
int ch = getchar(); // 讀取首字符
while (ch != '@') { // '@' 為結束標記
if (putc(ch, fp) == EOF) { perror("putc"); break; }
ch = getchar();
}
fclose(fp);
return 0;
}
輸入 abcdefghijklmnopqrstuvwxyz@,文件內容將為 abcdefghijklmnopqrstuvwxyz。


#include <stdio.h> #include <stdlib.h>
int main() {
FILE *fp = fopen("F:\\WEB\\TEST\\file_a.dat", "r");
if (!fp) { perror("fopen"); exit(EXIT_FAILURE); }
int ch = getc(fp); // 必須先讀一次再判斷
while (ch != EOF) { // 或 while (!feof(fp))
putchar(ch);
ch = getc(fp);
}
fclose(fp);
return 0;
}

getc/fgetc 讀取,再檢查返回值是否為 EOF。直接 while (!feof(fp)) 後讀取會多輸出一次 EOF 字符。"r"/"w" 會進行 \r\n ↔ \n 轉換;二進制模式 "rb"/"wb" 保持原樣。跨平台處理二進制數據請用 "rb"/"wb"。ferror(fp) 區分 EOF 與讀寫錯誤;clearerr(fp) 清除錯誤標誌。fflush(fp) 強制刷新。getchar() ≡ getc(stdin),putchar(ch) ≡ putc(ch, stdout)。標準流 stdin/stdout/stderr 自動關聯終端。