首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言讀取文本文件輸出多餘換行符:原因與解決方案

     編輯:程式設計綜合問答

常見原因

  1. `fgets` 保留換行符:`fgets(buf, n, fp)` 讀取時**包含 `\n`** (若緩衝區足夠)。直接 `printf("%s", buf)` 會輸出自帶換行,再加代碼中的 `\n` 導致雙換行。
  2. 格式字符串多寫 `\n`:`printf("%s\n", buf)` + `buf` 自帶 `\n` = 雙換行。
  3. Windows CRLF (`\r\n`) 未處理:文本模式下 `fgets` 保留 `\n`,但 `\r` 可能殘留末尾,顯示異常。
  4. 二進制模式讀取文本:`fopen("r")` vs `fopen("rb")` 在 Windows 行尾轉換行為不同。

標準讀取輸出模板


#include 
#include 

int main() {
    FILE* fp = fopen("test.txt", "r"); // 文本模式,自動處理 \r\n → \n
    if (!fp) return 1;
    
    char buf[1024];
    while (fgets(buf, sizeof(buf), fp)) {
        // 1. 移除末尾換行符 (若存在)
        size_t len = strlen(buf);
        if (len > 0 && buf[len-1] == '\n') buf[len-1] = '\0';
        // 2. 若來自 Windows 文件,可能再殘留 \r
        if (len > 1 && buf[len-2] == '\r') buf[len-2] = '\0';
        
        printf("%s\n", buf); // 統一由這裡控制換行
    }
    fclose(fp);
    return 0;
}

逐字符讀取替代方案


int ch;
while ((ch = fgetc(fp)) != EOF) {
    if (ch != '\n' && ch != '\r') putchar(ch); // 過濾所有換行
    // 或按需保留
}

原回答補充

原最佳回答「怎麼會有換行符,你加了\n?」方向正確但未給出具體檢查點與標準處理模板。上文提供 4 大原因、標準模板、逐字符替代方案。

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