You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言fscanf读取文件数据异常:菜单2无法显示文件内容

解决C语言图书管理系统查看数据功能跳过逻辑的问题

我帮你定位到问题啦!核心原因是你读取文件时用错了打开模式,导致程序根本读不到已保存的数据,直接跳过了显示逻辑。下面给你一步步拆解和修正:

1. 最关键的错误:文件打开模式不对

你的see_data函数里用了fopen("data-book.txt", "a")——"a"是追加模式,这个模式下文件指针会直接跳到文件末尾,所以fscanf从末尾开始读,自然读不到任何内容,循环直接终止,total被设为0,最后output_see也就没东西可显示。

修正方法:把打开模式改成只读模式"r",让文件指针从文件开头开始读取:

void see_data(Book* x, int* total) {
    FILE* file = fopen("data-book.txt", "r"); // 把"a"改成"r"
    if (file == NULL) {
        printf("No data found!!\n");
        *total = 0; // 确保total被初始化,避免后续出错
        return;
    }
    *total = 0;
    // 这里还要修正fscanf的格式:匹配你保存时的逗号分隔格式,同时支持带空格的书名/作者名
    while(fscanf(file, "%[^,], %[^,], %[^,], %d\n", x[*total].titleBook, x[*total].authorBook, x[*total].categoryBook, &x[*total].codeBook) == 4) {
      (*total)++;
    }
    fclose(file);
}

补充说明:原来的%s会读到空格就停止,如果你输入的书名带空格(比如"Harry Potter"),保存后读取会出错,用%[^,]可以读取到逗号为止的所有内容,完美匹配你保存时的格式。

2. 其他需要修正的小细节

  • scanf("%[^\n]s"里多余的s:在add和change函数中,scanf("%[^\n]s", ...)的s是冗余的,%[^\n]已经是完整的格式说明符,改成scanf("%[^\n]", ...)可以避免输入异常。
  • 初始化jumlah变量:main函数里int menu_program, jumlah, limit = 0;中的jumlah没初始化,虽然see_data会重置它,但直接进菜单2时可能有随机值隐患,建议改成int menu_program, jumlah = 0, limit = 0;。
  • case3的逻辑优化:菜单3修改数据时,建议先调用see_data加载最新的文件数据,再修改,避免内存中的数据和文件不一致。

修正后的核心函数示例

比如修改后的add函数片段:

void add(Book x[],int total){         // add (1)
    for(int i = 0; i < total; i++){
        fflush(stdin);
        printf("Masukan Judul Buku ke-%d: ", i + 1);
        scanf("%[^\n]", x[i].titleBook); // 去掉多余的s
        fflush(stdin);
        printf("Masukan Penulis Buku: ");
        scanf("%[^\n]", x[i].authorBook); // 去掉多余的s
        fflush(stdin);
        printf("Masukan Kategori Buku: ");
        scanf("%[^\n]", x[i].categoryBook); // 去掉多余的s
        fflush(stdin);
        printf("Masukan Kode Buku: ");
        scanf("%d", &x[i].codeBook);
    }
}

测试步骤

修改完后,先通过菜单1添加几本图书(数据会正确保存到data-book.txt),再选择菜单2,就能正常读取并显示所有已保存的图书数据啦!

内容的提问来源于stack exchange,提问作者Raihan Firdaus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 16:25:17