2016-10-31 43 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...