題目:從 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;
}
%u 對應 unsigned int,%lf 對應 double(讀取時 float 用 %f,double 用 %lf)。fopen、scanf、fscanf 返回值,防止無效數據導致邏輯錯誤。fclose,避免檔案句柄洩漏。F:\\VC\\ 絕對路徑,移植性極差。建議用相對路徑或配置檔。struct Record { unsigned int code; double sales[3]; } 封裝數據。