Ich arbeite an einer Zuweisung für eine Klasse und ich habe Probleme beim Anwenden von Dateieingabe/-ausgabe und Strukturen zusammen. Ich habe diesen Code, der verschiedene Autos aus einer Datei liest und ihre Informationen in ein Array von Strukturen kopiert.C Programm: Lesen von Datei und Kopieren in eine Struktur?
#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;
}
Dies ist, was die TXT-Datei wie folgt aussieht:
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
ich eine Druckfunktion in meinen Code eingefügt, so konnte ich sehen, ob die Autos richtig gelesen, aber wenn ich das Programm ausführen, um dieses der Ausgang ist:
▒▒▒8 0 0 1465899048 32767
ich habe absolut keine Ahnung, warum dies geschieht. Kann jemand helfen?
'Materie for (i = 0; i MAX_LEN <; i ++) { while (feof (pFile) && ferror (! pFile)) ':' while' -> 'if (3! = fscanf (pFile, ...)) break;' – BLUEPIXY
Ich vermute, dass Ihr spant Leerzeichen zwischen den Feldbezeichnern haben sollte, zB: "% s% s% s ... " –
Sie erwarten von' feof', ob ein zukünftiger Vorgang erfolgreich sein wird. Das ist nicht was es tut. Sie überprüfen nicht, ob 'fscanf' erfolgreich ist oder fehlschlägt. –