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);