2011-10-18 3 views
0

Essayer d'ajouter des valeurs à mon lecteur struct mais ma sortie pour eux après l'opération est indésirable:Erreur logique dans la boucle

résultat ressemble à:

 
    Name: Warner 
    runs: 0 
    not out: 0 
    how out: |||||||| (symbols) 

Player est un struct:

Player { 

int not_out, innings, runs; 

char pname[MAX_NAME]; 

char how_out[5]; 

} 

Voici mon code:

void scan_stats (Team_t player[]) { 

int i, status, runs, turns; 
char out; 
char string[MAX_PLYR]; 


FILE *inp; 

inp = fopen("teamstats.txt", "r"); 

do 
{ 

    fscanf(inp, "%s" "%d" "%*c" "%c", &string, &runs, &out); 

    printf("%s %d  %c\n", string, runs, out); /*They scan perfectly*/ 

    for (i = 0; i < MAX_PLYR; i++) { 

     player[i].innings = 0; 

     player[i].runs = 0; 

     player[i].not_out = 0; 

     turns = -1; 

     if (status = (strcmp(player[i].pname, string)) == 0) { 

      player[i].innings = player[i].innings + 1; 

      player[i].runs = player[i].runs + runs; 

      turns = turns + 1; 

      if (out == 'n') { 

       player[i].not_out = player[i].not_out + 1; 

      } 

      else { 

       player[i].how_out[turns] = out; 

      } 
     } 
    } 
} while (!feof(inp)); /*Printing the values of player at the end of this loop 
           produces garbage/ incorrectness*/ 
fclose(inp); 
} 
+0

À quoi ressemble le code qui l'imprime? Est-ce que le problème est la sortie "comment" ou autre chose? – user995048

Répondre

0

Vous ne placez jamais une fermeture '\0' dans le lecteur [i] .how_out - vous y placez simplement char s dedans. Ensuite, vous essayez de l'imprimer en tant que chaîne. À ce stade, printf imprime tout ce qui est trouvé jusqu'à ce qu'il obtienne une valeur NULL aléatoire, et c'est la poubelle que vous obtenez.

Pour résoudre ce problème, assurez-vous que player [i] .how_out a un '\ 0' (ou NULL) après le dernier caractère - et assurez-vous que le tampon est assez grand pour cette valeur supplémentaire.