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

Olimpik sporcuların adını madalya ülke yaşı vb. Bir dosyadan saklamak için bir yapıya sahibim.Dosya içeriği yapısını okumayacaktır.

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++; 
    } 
} 

Everytime o sadece crashes.I'm çalıştırmaya çalışırken programı çalıştırın: ne yaptığımı AJ Mleczko 26 Amerika Birleşik Devletleri 2002 Buz Hokeyi yüzden 0 1 0 1

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 

bu oldu Ayrıca basit bir arama da sorun olabilir.

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

'Yeni Zealand', diğerleri arasında, tek bir dize değil. Biçim belirleyicileriniz bunun nedeniyle senkronizasyondan çıkıyor. – Unimportant

+0

Oh, şunu görüyorum: D – conk

+0

Kodunuzu girin. –

cevap

0

"Trinidad and Tobago" ve "New Zealand" doğru şekilde taramalı %s engelleyen boşluk içerir. Ayrıca, while(!feof(fptr))'u kullanmak iyi bir fikir değildir.

Sen veri girişi için aşağıdaki döngüyü kullanabilirsiniz:

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

Teşekkürler. [^ 0-9] ne yapar? – conk

+0

@ C.Red Bu, '0', '1', '2', ..., '9' dışındaki tüm karakterlerle eşleşir. –