2016-10-31 42 views
0

我在C中創建了一個生活程序遊戲,問題是從我的一個函數中的文本文檔讀取時,如果有空行,上一行將不會重複。fgets()在從空行讀取時重複以前的字符串

例如,給定的

x 
    x 
     x 

    x 

輸出給我,作爲起點產生的輸入,

x 
    x 
    x 

    x x 

下面是代碼:

FILE *f; 
int i, j, k; 
char s[100]; 
f = fopen (input, "r"); 
for (j=0; j<height; j++) { 
    if(fgets (s, 100, f) != NULL && (s[0] != '\r' && s[0] != '\n')) 
    { 
    for (i=0; i<width; i++) { 
     board[i][j] = s[i] == 'x'; 
    } 
    } 
} 
fclose (f); 

使用前if語句,輸出將會是

x 
x 
    x 
    x 
x x 
x x 
x x 
x x 
x x 
+3

'爲(I = 0; I <寬度;我++)'即循環是錯誤的。如果看到換行符(''\ n'')或NUL(''\ 0'')字符,則需要停止。 – kaylum

+0

這就是if語句的用處。問題是,來自第3行的s [4]被保留在第5行(由於之間的空行),我不知道爲什麼。 – Milos

+0

@Milos,這就是爲什麼你需要檢查's [i]'是''\ n''還是''\ r''或''\ 0''。如果是這樣,跳出循環。 –

回答

0

爲什麼使空白行成爲特殊情況?

把它們作爲規則輸入代替:

len = strlen(s) 
for (i=0; i<len; i++) { //etc... etc... etc...