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

C语言修改文本文件指定值时while循环内if语句后程序异常求助

问题原因分析
  • 读写接口混用:你同时使用fread(二进制结构体读取)和fscanf(文本格式化读取)操作同一个文件流,两种接口的文件指针偏移逻辑完全不同,会导致指针位置错乱,是程序卡住的核心原因。同时你用文本模式r/w打开文件,和二进制读写接口本身就不匹配。
  • 重复读取数据:while循环的判断条件已经调用fread读取了一次数据,循环内部又调用fscanf再次读取,相当于每次循环会跳过一条数据,最终会提前读到文件末尾,或者读到无效数据触发运行异常。
  • 标记位逻辑错误:用来标记是否找到对应ID的变量v全程没有被赋值为1,哪怕匹配到了目标ID,最终也会输出未找到的提示。
  • 基础语法错误:打开文件失败的提示文本拼写错误,字符串中的换行没有使用转义符\n而是直接输入回车,会导致编译异常或者输出格式错乱。
修复代码

如果你存储数据的donation.txt是普通文本格式,全程使用文本读写接口即可,修复后代码如下:

int Equant()
{
    DisplayList();
    FILE * fpr_r = fopen("donation.txt", "r");
    FILE * fpr_w = fopen("Edonation.txt", "w");
    if (fpr_r == NULL || fpr_w == NULL)
    {
        printf("Unable to open the file\n");
        exit(1);
    }
    int Inumber, v=0;
    double NVQuant;

    struct Donate Esearch;
    printf("\nEnter the ID you want to change the quantity: ");
    scanf("%d", &Inumber);
    
    // 改用文本格式化读取作为循环条件,不要混用fread
    while (fscanf(fpr_r,"%d %s %s %s %d %lf", &Esearch.IDd, Esearch.supply, Esearch.Scode, Esearch.Cdonator, &Esearch.Nship, &Esearch.QuantityR) == 6)
    {
        if (Esearch.IDd == Inumber) 
        {
            v = 1; // 找到匹配项,标记位设为1
            printf("ID: %d Name of Supply: %s, Supply Code: %s, Donator: %s, No. of Shipment: %d, Quantity Received (Million): %lf\n",
                Esearch.IDd, Esearch.supply, Esearch.Scode, Esearch.Cdonator, Esearch.Nship, Esearch.QuantityR);
            printf("\nEnter the new Quantity value: ");
            scanf("%lf", &NVQuant);
            Esearch.QuantityR = NVQuant;
        }
        // 改用文本格式化写入,不要用fwrite
        fprintf(fpr_w, "%d %s %s %s %d %lf\n", Esearch.IDd, Esearch.supply, Esearch.Scode, Esearch.Cdonator, Esearch.Nship, Esearch.QuantityR);
    }
    fclose(fpr_r);
    fclose(fpr_w);
    if (!v)
    {
        printf("No line founded.\n");
    }
    // 原函数有int返回值,记得补充return语句
    return 0;
}
额外注意事项
  • 如果你的数据是用二进制方式写入donation.txt的,就全程使用fread、fwrite接口,去掉循环内的fscanf语句即可。
  • 操作完文件后可以把Edonation.txt替换回原文件,完成修改逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:27:00