C 程序 : Reading from file and copying to a struct?

标签 c file-io struct formatted-text

我正在为一个类(class)做作业,但在同时应用文件输入/输出和结构时遇到了问题。我有这段代码可以从一个文件中读取不同的汽车并将它们的信息复制到一个结构数组中。

#include <stdio.h>

#define MAX_LEN 1000 
#define NAME_LEN 30

struct car{
    char make[NAME_LEN + 1];
    char model[NAME_LEN + 1];
    int year;
    int cmpg;
    int hmpg;
    int avgmpg;
};
.
.
.
int main()
{
    int i;

    struct car cars[MAX_LEN];

    FILE* pFile;
    pFile = fopen("cars.txt", "r");

    .
    .
    .
    .

    for(i = 0; i < MAX_LEN; i++)
    {
        while(!feof(pFile) && !ferror(pFile))
            {
            fscanf(pFile, "%s%s%d%d%d ", cars[i].make, cars[i].model, &cars[i].year, &cars[i].cmpg, &cars[i].hmpg);
            cars[i].avgmpg = (cars[i].cmpg + cars[i].hmpg) / 2;
        }
    }

    selection_sort(cars, MAX_LEN);

    FILE* outFile;
    outFile = fopen("sorted_cars.txt", "w");

    fprintf(outFile, "Make     Model year  city mpg  highway mpg average mpg\n");

    for(i = 0; i < MAX_LEN; i++);
    {   
        fprintf(outFile, "%s %s %d %-2d %-10d %-12d\n", cars[i].make, cars[i].model, cars[i].year, cars[i].cmpg, cars[i].hmpg, cars[i].avgmpg); 
        printf("%s %s %d %d %d %d\n", cars[i].make, cars[i].model, cars[i].year, cars[i].cmpg, cars[i].hmpg, cars[i].avgmpg);
    }


    fclose(pFile);
    fclose(outFile);
    return 0;
    }

这是 .txt 文件的样子:

Mercury Sable 2009 18 28
Jeep Wrangler 2016 17 21
Honda Civic 2015 31 41
Toyota Corolla 2015 30 42
Toyota Prius 2010 51 48
Ford Escape 2013 23 33
Ford Fusion 2013 25 37
Acura MDX 2014 20 28
Lexus RX 2013 32 28

我在我的代码中插入了一个打印函数,这样我就可以查看汽车是否正确读取,但是当我运行该程序时,这是输出:

▒▒▒8 0 0 1465899048 32767

我完全不知道为什么会这样。有人可以帮忙吗?

最佳答案

首先删除 while() 并放入 if(!feof(pFile) && !ferror(pFile))。 在汽车文件的 fscanf() 中,在类型说明符之间放置空格。 应该是这样的

fscanf(pFile, "%s %s %d %d %d", cars[i].make, cars[i].model, &cars[i].year, &cars[i].cmpg, &cars[i].hmpg); cars[i].avgmpg = (cars[i].cmpg + cars[i].hmpg) / 2;

在直接写入文件之前,首先仅在控制台中打印struct 的值,以及是否以正确的方式获取它。

最后的修改是 而不是使用这个

fprintf(outFile, "%s %s %d %-2d %-10d %-12d\n", cars[i].make, cars[i].model, cars[i].year, cars[i].cmpg, cars[i].hmpg, cars[i].avgmpg);

使用这个

fprintf(outFile, "%s %s %d %d %d %d\n", cars[i].make, cars[i].model, cars[i].year, cars[i].cmpg, cars[i].hmpg, cars[i].avgmpg);

希望对您有所帮助。

关于C 程序 : Reading from file and copying to a struct?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38417478/

相关文章:

c++ - OS API 在结构中分配成员。先释放结构还是先释放每个成员?

c - 如何通过 Bachelor 结构和 Info 结构访问 Info1?

c - 如何在 C 源代码中存储 C 可执行二进制文件?

c - 如何检查是否在宏中从 C 设置了环境变量

iOS - 将 jpeg 文件写入文件系统

macos - 在Mac上以管理员权限运行可执行文件

java - 如何在读取文本文件时查找类型值?

c - 在 C 中处理字符数组

c - 使用各种格式说明符打印 short int

C++ 元组与结构