首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言文件 I/O:getc/fgetc 與 putc/fputc 字符讀寫實戰

     編輯:關於C語言

C 語言文件 I/O:getc/fgetc 與 putc/fputc 字符讀寫實戰

成功打開文件(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)。

實例 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。

終端輸入演示
文件輸出內容

實例 2:讀取文件輸出到終端

#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;
}
終端輸出演示

關鍵注意事項

  1. 先讀後判:循環必須先調用 getc/fgetc 讀取,再檢查返回值是否為 EOF。直接 while (!feof(fp)) 後讀取會多輸出一次 EOF 字符。
  2. 二進制 vs 文本模式:Windows 下文本模式 "r"/"w" 會進行 \r\n ↔ \n 轉換;二進制模式 "rb"/"wb" 保持原樣。跨平台處理二進制數據請用 "rb"/"wb"。
  3. 錯誤處理:ferror(fp) 區分 EOF 與讀寫錯誤;clearerr(fp) 清除錯誤標誌。
  4. 緩衝區:標準 I/O 默認全緩衝(文件)或行緩衝(終端),fflush(fp) 強制刷新。

擴展:getchar/putchar 宏

getchar() ≡ getc(stdin),putchar(ch) ≡ putc(ch, stdout)。標準流 stdin/stdout/stderr 自動關聯終端。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved