2010-11-21 13 views
0

C에서 FILE * fp를 사용하여 저장된 행렬을 읽는 방법은 무엇입니까? 파일을 읽는 중 문제가 발생했습니다.

int main() 
{ 
    int i,j; 
    FILE *fp; 
    int **mat; //matriz de cartas apartir do arquivo 
    int n; //numero de jogadores 
    mat=(char**)malloc(3*sizeof(char*)); 
    for(i=0;i<2;i++){ 
     mat[i]=(char*)malloc(3*sizeof(char)); 
     if(!mat){ 
      printf("erro de alocacao\n"); 
      exit(1); 
     } 
    } 

    fp=fopen("arquivo","r"); //this is the file to read 
    if(fp==NULL){ 
     printf("erro de abertura de ficheiro\n"); 
     exit(1); 

    } 
    for(i=0;i<3;i++){ 
     for(j=0;j<3;j++){ 
      fscanf(fp,"%d",&mat[i][j]); 
     } 
     printf("%d\n",mat[i][j]); //problem here 
    } 
    return 0; 
} 

은 내가 읽고 싶은 행렬이다 :

1 2 9 
3 6 7 
4 9 5 
+1

혹시 가지고있는 문제에 대해 언급하고 싶습니까? –

+0

출력은 어떻게됩니까? – rtpg

답변

2

이 고려

for(i=0;i<3;i++){ 
    for(j=0;j<3;j++){ 
     fscanf(fp,"%d",&mat[i][j]); 
} 
printf("%d\n",mat[i][j]); //problem here 

존재 : 당신이 배열의 범위를 벗어난 인쇄물을 게시 무엇

for(i=0;i<3;i++){ 
    for(j=0;j<3;j++){ 
     fscanf(fp,"%d",&mat[i][j]); 
     printf("%d ",mat[i][j]); 
    }  
    printf("\n"); 
} 

+0

나는 그것이 문제라고 생각한다. 문제는 잘 정의되어 있지 않습니다. – prap19

1

문자에 할당 된 공간에 정수를 읽으려고 시도합니다. int을 사용해야 할 때 malloc() 작업은 sizeof(char *)sizeof(char)의 관점에서 수행됩니다. 이것은 문제를 일으킬 것입니다.

인쇄물이 스캔과 관련하여 어디 있는지 검토해야합니다. 현재 각 데이터 행의 마지막 숫자 만 인쇄하려고 시도하지만 인쇄물이 나타나는 지점에 j 값이 무엇인지 생각해야합니다.

또한 데이터가 유효한지 확인하기 위해 반환 상태를 scanf()에서 확인해야합니다. 입력 파일을 닫아야합니다. 프로그램이 즉시 종료 되더라도 '획득 한 자원을 공개하십시오'는 좋은 훈련입니다. 동일한 주석은 동적으로 할당 된 배열에도 적용될 수 있습니다 (할당 한 것을 해제하십시오).

관련 문제