Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C程序:从文件读取并复制到结构?_C_File Io_Struct_Formatted Text - Fatal编程技术网

C程序:从文件读取并复制到结构?

C程序:从文件读取并复制到结构?,c,file-io,struct,formatted-text,C,File Io,Struct,Formatted Text,我正在为一个类做作业,但在一起应用文件输入/输出和结构时遇到了问题。我有一段代码,它从一个文件中读取不同的汽车,并将它们的信息复制到一个结构数组中 #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

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

#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;
    }
我在代码中插入了一个打印函数,以便查看汽车是否正确读取,但当我运行程序时,这是输出:

▒▒▒8 0 146589048 32767

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

首先删除
while()
并将
放在if(!feof(pFile)和&&!feror(pFile))
上。 在cars文件的
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;
在直接写入文件之前,首先仅在console中打印
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);

我希望这将对您有所帮助。

for(I=0;I
while
-->
如果(3!=fscanf(pFile,…)中断;
我怀疑您的不足应该在字段说明符之间有空格,即:“%s%s%s…”您希望feof能预测未来的操作是否会成功。它不是这样做的。您不会检查fscanf是否成功或失败。哎呀
3!=
-->
5!=和
for(i=0;i
删除最后一个
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);