2011-10-18 2 views
0

내 구조체 플레이어에 값을 추가하지만, 수술 후 그들을 위해 내 출력이 정크 시도 :논리 오류가

Player { 

int not_out, innings, runs; 

char pname[MAX_NAME]; 

char how_out[5]; 

} 
:

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

플레이어 구조체입니다 : 같은

출력 본다

여기 내 코드 :

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

인쇄하는 코드는 어떻게 생깁니 까? 문제는 "아웃풋"아웃풋인가 아니면 다른 것입니까? – user995048

답변

0

플레이어 [i] .how_out에 절대로 '\0'을 두지 마십시오. 단지 char을 넣으십시오. 그런 다음 문자열로 인쇄하려고합니다. 이 시점에서 printf은 무작위 NULL이 될 때까지 발견 된 내용을 인쇄합니다. 그리고 그것은 여러분이 얻는 쓰레기입니다.

이 문제를 해결하려면 마지막 char 뒤에 player [i] .how_out의 값이 '\ 0'(또는 NULL)인지 확인하고 여분의 NULL에 버퍼가 충분한 지 확인하십시오.