2013-07-15 2 views
2

다음 코드에서 파일의 모든 문자 (줄 바꿈 포함)를 저장하려고합니다. 개행을 읽으면 변수 'i'가 증가하고 'j'가 0으로 재설정되지만 이는 발생하지 않습니다. 뉴 라인이 실제로 배열에서 콘솔로 인쇄되어 실제로 읽히고 저장된다는 것을 확인했습니다.getc를 사용하여 파일을 읽을 때 문자를 검사 할 때

void scan_solved_nonogram(board *b) { 
    FILE *file = fopen("test.txt", "r"); 

    int i = 0, j = 0; 
    while((b->symbol[i][j] = getc(file)) != EOF) { 
    j++; 

    if(b->symbol[i][j] == '\n') { 
     i++; 
     j = 0; 
    } 
    } 

    fclose(file); 

    b->size_i = i; 
    b->size_j = j; 

} 
+3

대신 'while ((b-> symbol [i] [j] = getc (file))! = EOF)'제안, ** 샘플 int int ** 변수를 사용하십시오. while ('c = getc (file))! = EOF)'while'{}''\ n'에 대해'ch'를 확인하십시오. –

+0

그 기호는 char의 2 차원 배열이라고 가정합니다. 0xA 문자 (개행 문자)가 있음을 확인 했습니까? – Tarik

답변

8

문제는 줄 바꿈 문자를 확인하기 전에 j를 증가시키는 것입니다.

while((b->symbol[i][j] = getc(file)) != EOF) { 
    j++;// you increment j, so you need to check for newline at j-1 

    if(b->symbol[i][j-1] == '\n') { 
     i++; 
     j = 0; 
    } 
    } 
+2

좋은 캐치, 나 자신을 보지 못했다! – Magn3s1um

+2

정말 좋은 캐치, 그에게도 제안을주고, 어떻게 정류하는 것이 좋을 것입니다! :) –

+0

제안에 의해, OP는 ** int ** 변수를 사용하는 동안 조건을 충족해야합니다. 내 의견을 읽으십시오. –

관련 문제