2016-04-06 10 views
0
struct athlete{ 
    char firstName[50]; 
    char lastName[70]; 
    int age, total, bronze, gold, silver, year; 
    char country[70]; 
    char sport[100]; 
}; 

Ich habe eine Struktur zu speichern Olympischen Athleten Namen Medaillen Land Alter usw. aus einer Datei geben. AJ Mleczko 26 USA 2002 Eishockey 0 1 0 1Datei Inhalt wird nicht in Struktur lesen

Aaron Armstrong 30 Trinidad and Tobago 2008 Athletics 0 1 0 1 
Aaron Egbele 25 Nigeria 2004 Athletics 0 0 1 1 
Aaron Gate 21 New Zealand 2012 Cycling 0 0 1 1 

so, was ich tat, war dies:

void readFile(){ 
    FILE *fptr; 
    int i; 
    fptr = fopen("olympics.txt", "r"); 
    if (fptr == NULL) 
    { 
     printf ("Error"); 
    } 
    i = 0; 
    while (!feof(fptr)) 
    { 
     fscanf(fptr,"%s %s %d %s %d %s %d %d %d %d ", athletes[i].firstName,athletes[i].lastName, &athletes[i].age, athletes[i].country, &athletes[i].year, athletes[i].sport, &athletes[i].gold, &athletes[i].silver, &athletes[i].bronze, &athletes[i].total); 
     i++; 
    } 
} 

Jedesmal, wenn ich laufen es das Programm nur crashes.I'm versucht zu laufen eine einfache Suche auch, damit könnte ein Problem sein.

void compareString(char first[], char second[]) { 
    int i = 0; 
    struct athlete athletes[2000]; 
    for(i = 0; i < 2000; i++) 
    { 
     if(strcmp(athletes[i].firstName, first) == 0 && strcmp(athletes[i].lastName, second) == 0) 
     { 
      printf("%s%s", athletes[i].firstName, athletes[i].lastName); 
     } 
     else 
     { 
      printf("error"); 
     } 
    } 
} 
+2

'New Zealand' unter anderem keine einzige Saite ist. Ihre Formatbezeichner gehen deshalb nicht mehr synchron. – Unimportant

+0

Oh, ich sehe das, danke: D – conk

+0

Deinen Code einrücken. –

Antwort

0

"Trinidad and Tobago" und "New Zealand" Leerzeichen enthalten, die aus dem Abtasten korrekt %s ihnen verhindert. Es ist auch keine gute Idee, while(!feof(fptr)) zu verwenden.

Sie können die folgende Schleife zur Eingabe von Daten verwenden:

while (fscanf(fptr," %s %s %d %[^0-9] %d %[^0-9] %d %d %d %d", athletes[i].firstName, athletes[i].lastName, &athletes[i].age, athletes[i].country, &athletes[i].year, athletes[i].sport, &athletes[i].gold, &athletes[i].silver, &athletes[i].bronze, &athletes[i].total) == 10) 
{ 
    i++; 
} 
+0

Danke. Was macht [^ 0-9]? – conk

+0

@ C.Red Dies entspricht allen Zeichen außer '0', '1', '2', ..., '9' –

Verwandte Themen