2016-10-31 13 views
0

私はC言語のゲームプログラムを作成していますが、問題は関数のテキストドキュメントから読み込むときです。前の行は繰り返されません。使用する前にfgets()空白行からの読み込み中に前の文字列を繰り返す

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); 

例えば、出力はここ

x 
    x 
    x 

    x x 

コードは、出発世代として、私を与えている

x 
    x 
     x 

    x 

の入力を与えられましたifステートメントは、出力は

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

を 'ため(i = 0; iは幅<; 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... 
関連する問題