繁体   English   中英

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

[英]How can I read a file content multiple times in C

我正在尝试在C中创建一个简单的待办事项列表,但read选项仅在第一次运行时显示正确的信息。 如果添加新项目,则需要关闭并再次打开程序以显示更新的列表。

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

#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)再次开始从rewind(file)开头读取/写入。

请注意,如果您以附加模式打开文件,则这些命令实际上将不执行任何操作。 所有写操作仍将被强制到文件末尾。

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

伴随着它,您正在使用未初始化的task 初始化它或检查它是否已初始化,然后再开始使用它来修复它。

问题是您在写入文件后没有关闭文件。 这将刷新输出缓冲区。 程序退出时,文件自动关闭,这就是为什么重新打开程序可以解决问题的原因。

您还应该在阅读案例结束时关闭文件,因为每次阅读时都会重新打开它,而不是重用现有的打开流。

打印task会导致未定义的行为,因为您从未初始化task

#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);
            }
            fclose(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);
            fclose(p);
            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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM