c - 如何在C中多次读取文件内容

标签 c file read-write fgetc

我正在尝试用 C 编写一个简单的待办事项列表,但读取选项仅在第一次运行时显示正确的信息。如果我添加一个新项目,那么我需要关闭并再次打开程序以显示更新后的列表。

添加选项工作正常,删除选项尚未实现。

#include <stdio.h>

int main (void) {
    int opt = 1;
    char task[50];
    char add[50];
    char read;
    FILE *p, *q;

    printf("\n===To-do List Simple Application===\n");
    printf("Choose an Option:\n");
    do {
        printf("1- Show List\n");
        printf("2- Add an item\n");
        printf("3- Delete an item\n");
        printf("0- Exit\n");
        scanf("%d" ,&opt);
        switch(opt){
        case 1:
            q = fopen("list.txt", "r");
            printf("\n\n==================\n");
            read = fgetc(q);
            while (read != EOF){
                printf("%c" ,read);
                read = fgetc(q);
            }
            printf("%s \n", task);
            printf("\n==================\n\n");
            break;

        case 2:
            p = fopen("list.txt", "a");
            printf("\n\n==================\n");
            printf("Inform the item to be added:\n");
            scanf("%s" ,add);
            fprintf(p, "\n%s",add);
            printf("\n==================\n\n");
            break;

        case 3:
            printf("\n\n==================\n");
            printf("delete\n");
            printf("\n==================\n\n");
            break;

        case 0: 
            printf("\n\n==================\n");
            printf("exit\n");
            printf("\n==================\n\n");
            break;
        }   
    }while (opt!=0);
    return 0;
}

最佳答案

您可以使用 fseek(file, 0, SEEK_SET)rewind(file) 再次开始从文件开头读取/写入。

请注意,如果您以追加模式打开文件,这些基本上什么都不做;所有写入仍将强制到文件末尾。

但是,这些不会修复您的代码。完成写入或读取文件后,您需要关闭文件。

除此之外,您正在使用未初始化的 task。在开始使用它解决此问题之前对其进行初始化或检查它是否已初始化。

关于c - 如何在C中多次读取文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57530723/

相关文章:

c++ - 如何在不四舍五入到 n 位小数的情况下打印周期数?

c - 用 C 编写的服务器中最有效的文件登录是什么?

将带有字符串数组作为参数的 glib C 方法转换为 Go

c++ - 从文件中读取大量内容并将该内容写入新文件

c - 如果必须终止控制台,如何查看 Visual Studio 的输出?

file - 如何将原始 RTSP 流转储到文件?

java - 如何从具有动态条目的文件中拆分

c - Write() 到文件描述符在 read() 时消失

ios - 从 plist 获取数据到 NSMutableArray 并将 NSMutableArray 写入同一个 plist iPhone

c++ - 解密 XOR 加密文件过早中止