2013-07-15 24 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

一個建議,而不是'而((B->符號[i] [j] = GETC(文件))= EOF!)',使用** ** INT變量eample'INT CH;並改變,而像'while((c = getc(file))!= EOF)'現在在'{}'檢查'ch'對'\ n' –

+0

我假設符號是char的二維數組。你確認你得到一個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應該在while條件中使用** int **變量,閱讀我的評論回答。 –