2017-10-17 1 views
1

숫자와 문자의 행렬 인 input1.txt라는 파일이 있습니다. 각 채터가 1 셀이되도록 2D 배열로 읽고 저장하려고합니다. 여기 내 텍스트 파일입니다 : 여기파일을 2D 배열로 읽어들입니다.

1111S11110 
0000010001 
110100010d 
t001111110 
0100000001 
0111111101 
1111111101 
00000D01T1 
0111110001 
0000E01110 

그리고 나의 코드 :

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


// Function for finding the array length 
int numOfLines(FILE *const mazeFile){ 
    int c, count; 
    count = 0; 
    for(;;){ 
     c = fgetc(mazeFile); 
     if(c == EOF || c == '\n') 
      break; 
     ++count; 
    } 
    return count; 
} 

// Main Function 
int main(int argc, char **argv) 
{ 
    // Opening the Matrix File 
    FILE *mazeFile; 
    mazeFile = fopen("input1.txt", "r"); 
    if(mazeFile == NULL) 
     return 1; 
    int matrixSize = numOfLines(mazeFile); 

    // Reading text file into 2D array 
    int i,j; 
    char mazeArray [matrixSize][matrixSize]; 

    for(i=0;i<matrixSize;i++){ 
      for(j=0;j<matrixSize;j++){ 
       fscanf(mazeFile,"%c", &mazeArray[i][j]); 
      } 
    } 

    for(i=0;i<matrixSize;i++){ 
     for(j=0;j<matrixSize;j++){ 
      printf("%c",mazeArray[i][j]); 
     } 
    } 

    fclose(mazeFile); 
    return 0; 
} 

내가 그들을 인쇄 할 때 내 콘솔 출력은 비슷하지만 :

0000010001 
110100010d 
t001111110 
0100000001 
0111111101 
1111111101 
00000D01T1 
0111110001 
[email protected] 

그것을 읽지 않습니다 보인다 첫 번째 줄,하지만 색인의 측면에서 나는 그것이 괜찮다고 생각합니다. 나는 C.에 새로운 사람도 도와 주시겠습니까? 미리 감사드립니다. 몇 가지 문제는 여기에있다

+1

'numOfLines'은 잘못된 이름이며, 첫 번째 줄의 문자 수를 계산합니다. 그리고 그러므로, 그들을 읽습니다! 독서를 계속한다면 처음부터 다시 시작하는 이유는 무엇이라고 생각합니까? 마법? ['rewind()'] (https://linux.die.net/man/3/rewind)를 시도하십시오. –

+1

'numOfLines()'함수는 파일을 끝까지 읽습니다. 다시 읽으려면 시작 부분으로 돌아갈 필요가 있습니다 (일반 파일은 가능하지만 가능한 다른 종류의 스트림은 찾을 수 없음). –

+1

@JohnBollinger **이 코드의 혼란을 불러 일으키는 ** 마지막까지 ** 읽지는 않습니다 ... –

답변

1

있습니다

numOfLines 기능은 잘못된 것입니다. 다음은 수정 된 버전입니다. 실제로는 줄 수를 계산하고 파일 포인터를 파일의 시작 부분으로 다시 설정합니다.

버전에 따라 첫 줄의 문자 수가 계산되므로 (결과적으로 값이 정확하고 값이 정확하지 않은 것으로 나타남) 파일 포인터를 파일의 시작 부분으로 재설정하지 않았습니다 (따라서 첫 번째 줄 귀하의 출력물에 누락되었습니다.)

int numOfLines(FILE *mazeFile) { // no const here BTW !! 
    int c, count; 
    count = 0; 
    for (;;) { 
    c = fgetc(mazeFile); 
    if (c == EOF) 
     break;   // enf of file => we quit 

    if (c == '\n') 
     ++count;  // end of line => increment line counter 
    } 
    rewind(mazeFile); 

    return count+1; 
} 

그런 다음 각 행의 끝에서 \n 문자를 흡수기하는 것을 잊었다. 이 \n은 파일의 각 줄 끝에 있지만 2 차원 배열에 저장하지 않으려는 경우에도 읽어야합니다.

for (i = 0; i<matrixSize; i++) { 
    for (j = 0; j<matrixSize; j++) { 
     fscanf(mazeFile, "%c", &mazeArray[i][j]); 
    } 

    char eol;       // dummy variable 
    fscanf(mazeFile, "%c", &eol);  // read \n character 
    } 

마지막으로 위에서 언급 한 이유로 \n을 인쇄해야합니다.

for (i = 0; i<matrixSize; i++) { 
    for (j = 0; j<matrixSize; j++) { 
    printf("%c", mazeArray[i][j]); 
    } 

    putc('\n', stdout);     // print \n 
} 
+0

내 실수를 볼 수 있도록 도와 주셔서 감사합니다 :). –

+1

@HabilGanbarli 당신을 진심으로 환영합니다. 명확한 질문을 위해 당신은 거의 항상 여기에 빠르고 명확한 대답을 얻습니다. –

관련 문제