2016-11-09 4 views
2

안녕하세요.이 문자 파일의 첫 번째 열은 두 번째이고 세 번째 것은 정수입니다. 그러나 값 correctley를 읽고 인쇄 할 수는 없습니다. 은 txt 파일을 올바르게 인쇄 할 수 없습니다.

그래서이 파일을 읽기 위해 노력하고 있습니다 :

c 6 
o 4 3 
o 2 4 
o 3 2 
o 1 1 
o 3 3 

을 그리고 여기에 코드 것은 :

#include <stdio.h> 
#include <stdlib.h> 

#define N 6 

int main (int argc, char *argv[]) 
{ 
    int i; 
    int M[N]; 
    int U[N]; 
    char c ; 
    FILE* fichier = NULL; 

    fichier = fopen("pb1.txt","r"); 

if(fichier!= NULL) 
    { 
    while(!feof(fichier)) 
    { 
    fscanf(fichier, "%c %d %d", &c, &M[i], &U[i]); 

    printf("%c %d %d \n", c, M[i],U[i]); 
    } 

    } 
} 

이것은 내가 더이

c 6 1472131424 
o 4 3 

4 3 
o 2 4 

2 4 
o 3 2 

3 2 
o 1 1 

1 1 
o 3 3 

3 3 

같은 출력이 보이는없는 것입니다 왜 내게 이런 단서를 주는지. 고마워요

+1

스택 오버플로에 오신 것을 환영합니다! [while (! feof (file)) "이 항상 잘못된 이유는 무엇입니까?] (http://stackoverflow.com/q/5431941/2173917) –

답변

1

첫 번째 문제는 여기에서 볼 수 있습니다. i의 값을 초기화하지 않았습니다. undefined behavior을 호출합니다.

자세히 설명하면 i은 자동 로컬 변수이며 명시 적으로 초기화되지 않으면 불확정 값을 갖습니다. 그것을 사용하려고 시도하면 UB로 이어질 것입니다.

또한 값을 저장하고 인쇄하기위한 색인으로 사용되는 것으로 가정 된 i의 값을 늘린 적이 없습니다.

마지막으로 스캔 된 값을 사용하기 전에 항상 scanf()의 반환 값과 패밀리가 성공했는지 확인하십시오.

그렇습니다. Why is “while (!feof (file))” always wrong?