我正在使用此代码来读取包含矩阵或多个矩阵的文件。 还有第一行包含有关每个上面的矩阵的一些信息。
这是代码:
void loadfile(char *filename, maps **head, maps **tail){
FILE *file;
maps *aux;
char buffer[MAX_CHAR];
bool flag = true;
int current_line = 1;
/* open file */
file = openfile(filename, "r");
while(fgets(buffer, MAX_CHAR, file) != NULL){
while(strcmp(buffer, "\n") == 0){
fgets(buffer, MAX_CHAR, file);
flag = true;
printf("HERE\n");
}
if(flag == true){
printf("Dayum\n");
aux = emptymap();
settings(buffer, aux);
managelist(head, tail, aux);
flag = false;
current_line = 1;
}else{
fillboard(buffer, aux, current_line);
current_line++;
}
}
/* close file */
fclose(file);
}
For some files it works okay, like this one:
But for others like this, it doesn't:
它在没有任何理由的情况下陷入了这个循环:
while(strcmp(buffer, "\n") == 0){
fgets(buffer, MAX_CHAR, file);
flag = true;
printf("HERE\n");
}
我需要帮助,因为我真的不明白为什么会这样!
答案 0 :(得分:2)
未检查您对fgets
的内部调用(while(strcmp)
循环内)。并且,引用C11(N1570)7.21.7.2/3:
如果遇到文件结尾但没有 字符已被读入数组,数组的内容保持不变并且a 返回空指针。
因此,如果缓冲区仅包含'\n'
并且这是文件中的最后一个字符,那么您将永远陷入循环,因为缓冲区不会被覆盖。