阅读文件 - fgets读取\ n其中不是

时间:2018-05-08 16:41:45

标签: c

我正在使用此代码来读取包含矩阵或多个矩阵的文件。 还有第一行包含有关每个上面的矩阵的一些信息。

这是代码:

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

我需要帮助,因为我真的不明白为什么会这样!

1 个答案:

答案 0 :(得分:2)

未检查您对fgets的内部调用(while(strcmp)循环内)。并且,引用C11(N1570)7.21.7.2/3:

  

如果遇到文件结尾但没有   字符已被读入数组,数组的内容保持不变并且a   返回空指针。

因此,如果缓冲区仅包含'\n'并且这是文件中的最后一个字符,那么您将永远陷入循环,因为缓冲区不会被覆盖。