我正在为一个类进行作业,并且在应用文件输入/输出和结构时遇到了麻烦。我有这个代码从一个文件读取不同的汽车,并将他们的信息复制到一个结构数组中。C程序:从文件读取并复制到结构?
#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
我插入打印功能到我的代码,所以我可以看到,如果汽车正确读取,但是当我运行该程序,这是输出:
▒▒▒80 0 1465899048 32767
我绝对不知道为什么会这样。任何人都可以帮忙吗?
'为(i = 0; I
BLUEPIXY
我怀疑你的scant在字段说明符之间应该有空格,例如:“%s%s%s ...“ –
您正在期待'feof'来预测未来的行动是否会成功。这不是它所做的。你不检查'fscanf'是否成功或失败。 –