读取文件正在跳过C中的行

时间:2011-04-17 06:33:21

标签: c file-io

我有一个名为todo.txt的文件,我有一个列出文件中每一行的函数:

void list() {
    FILE *todoFile;
    todoFile = fopen("./todo.txt", "r");
    char line[4096];
    int len;

    if (todoFile != NULL) {
        while (fgets(line, sizeof line, todoFile)) {
            len = strlen(line);
            if (len && (line[len - 1] != '\n')) {
                printf("%s", line);
            }
            printf("%s", line);
            fclose(todoFile);
        }
    } else {
        printf("ERROR");
    }

}

todo.txt内容为:

* foo! 
* hello 
* FP!

但是当我使用list()函数时,只打印第一行:

* foo!

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

您无法在已关闭的文件上致电fgets()

答案 1 :(得分:0)

在完成while循环中的读取后,您需要关闭文件

void list() {
    FILE *todoFile;
    todoFile = fopen("./todo.txt", "r");
    char line[4096];

    if (todoFile != NULL) {
        while (fgets(line, sizeof line, todoFile)) {
            printf("%s", line);
        }
        fclose(todoFile);
    } else {
        printf("ERROR");
    }
}