C语言结构体和文件操作销售记录输出

img


希望能够有人帮忙解答一下,非常感谢,自己打了好多次都没有成功,太多报错了

参考程序如下:

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

#define MAX_RECORDS 100

// 销售记录结构体
typedef struct {
    char code[5];
    char name[11];
    int price;
    int quantity;
    long amount;
} SalesRecord;

// 比较函数,用于排序销售记录
int compareRecords(const void* a, const void* b) {
    SalesRecord* recordA = (SalesRecord*)a;
    SalesRecord* recordB = (SalesRecord*)b;

    // 按产品代码升序排序
    int codeComparison = strcmp(recordA->code, recordB->code);
    if (codeComparison != 0) {
        return codeComparison;
    }

    // 如果产品代码相同,按金额降序排序
    return recordB->amount - recordA->amount;
}

int main() {
    FILE* input = fopen("A_01_in.dat", "r");
    FILE* output = fopen("A_01_out.dat", "w");

    if (input == NULL || output == NULL) {
        printf("无法打开文件。\n");
        return 1;
    }

    while (!feof(input)) {
        int numRecords;
        fscanf(input, "%d", &numRecords);
        fgetc(input);  // 读取换行符

        SalesRecord records[MAX_RECORDS];

        // 读取销售记录
        for (int i = 0; i < numRecords; i++) {
            fscanf(input, "%s %s %d %d %ld", records[i].code, records[i].name, &records[i].price, &records[i].quantity, &records[i].amount);
            fgetc(input);  // 读取换行符
        }

        // 按要求排序销售记录
        qsort(records, numRecords, sizeof(SalesRecord), compareRecords);

        // 写入排序后的销售记录
        fprintf(output, "%d\n", numRecords);
        for (int i = 0; i < numRecords; i++) {
            fprintf(output, "%s, %s, %d, %d, %ld\n", records[i].code, records[i].name, records[i].price, records[i].quantity, records[i].amount);
        }

        // 找出金额总和最大的产品代码
        char maxAmountCode[5];
        long maxAmount = 0;
        for (int i = 0; i < numRecords; i++) {
            if (records[i].amount > maxAmount) {
                maxAmount = records[i].amount;
                strcpy(maxAmountCode, records[i].code);
            }
        }
        fprintf(output, "%s\n", maxAmountCode);
    }

    fclose(input);
    fclose(output);

    printf("程序执行完毕。\n");
    return 0;
}

A_01_out.dat 的数据如下:
4
M001, machine, 500, 70, 35000
M001, machine, 500, 20, 10000
M150, machine, 400, 40, 16000
P106, Power, 600, 70, 42000
P106
2
M001, machine, 500, 70, 35000
P106, Power, 600, 70, 42000
P106