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

C語言文件操作實戰:讀取商場銷售數據並統計輸出

     編輯:C 語言問答

C語言文件讀寫與數據統計完整案例

題目:從 test.txt 讀取 120 筆記錄,每筆含商場代號及三類商品營業額,每 4 個數為一組,統計三類商品總營業額並寫入 t2.dat。

數據格式說明

商場代號(無符號整數) 商品1營業額(浮點數) 商品2營業額 商品3營業額
3023 56.98 98.2 36.81
3024 45.36 45.87 98.57
...

完整程式碼(含錯誤處理與資源管理)

#include <stdio.h>
#include <stdlib.h>

int main() {
    unsigned int code, n;
    double t1, t2, t3;
    double sum1 = 0.0, sum2 = 0.0, sum3 = 0.0;
    FILE *infp, *outfp;

    // 建議使用相對路徑或命令列參數,避免硬編碼絕對路徑
    infp = fopen("test.txt", "r");
    outfp = fopen("t2.dat", "w");

    if (!infp || !outfp) {
        perror("文件打開失敗");
        if (infp) fclose(infp);
        return EXIT_FAILURE;
    }

    printf("請輸入記錄數量: ");
    if (scanf("%u", &n) != 1) {
        fprintf(stderr, "輸入無效\n");
        fclose(infp); fclose(outfp);
        return EXIT_FAILURE;
    }

    for (unsigned int i = 0; i < n; ++i) {
        // fscanf 返回成功讀取的項數,應檢查是否為 4
        if (fscanf(infp, "%u %lf %lf %lf", &code, &t1, &t2, &t3) != 4) {
            fprintf(stderr, "第 %u 筆數據格式錯誤或提前結束\n", i + 1);
            break;
        }
        sum1 += t1;
        sum2 += t2;
        sum3 += t3;
    }

    fprintf(outfp, "%.2f %.2f %.2f", sum1, sum2, sum3);  // 保留兩位小數更符合金額習慣

    fclose(infp);
    fclose(outfp);
    printf("統計完成,結果已寫入 t2.dat\n");
    return EXIT_SUCCESS;
}

關鍵技術點

  1. fscanf 格式串:%u 對應 unsigned int,%lf 對應 double(讀取時 float 用 %f,double 用 %lf)。
  2. 錯誤檢查:檢查 fopen、scanf、fscanf 返回值,防止無效數據導致邏輯錯誤。
  3. 資源釋放:所有路徑(正常/錯誤)均需 fclose,避免檔案句柄洩漏。
  4. 路徑處理:原代碼使用 F:\\VC\\ 絕對路徑,移植性極差。建議用相對路徑或配置檔。

進階優化方向

  • 使用結構體 struct Record { unsigned int code; double sales[3]; } 封裝數據。
  • 動態分配記憶體存儲所有記錄,支援未知筆數(讀到 EOF 為止)。
  • 生產環境建議用二進制格式或 CSV/JSON,便於跨語言交換。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved