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

C语言读取txt文件内容冒泡排序输出有序列表故障求助

问题定位与修复方案

1. 排序逻辑核心错误(直接导致排序失效)

你的代码中if判断语句末尾多写了一个多余的分号:

if (emo[g+1].QuantityR<emo[g].QuantityR);  // 此处分号为错误冗余代码
{
    temp=emo[g];
    emo[g]=emo[g+1];
    emo[g+1]=temp;
}

这个分号会让if判断逻辑直接变成空语句,后续的交换代码无论判断条件是否成立都会执行,完全打乱排序逻辑,删除这个分号即可解决大部分排序异常。

2. 冒泡排序边界逻辑错误

当前冒泡循环的边界设置会漏掉最后一个元素的比较,修改为如下写法即可覆盖全部元素排序:

for (i=0;i<size;++i){
    // 原边界size - (i+1)改为size - i
    for (g=0;g<size - i;g++){
        if (emo[g+1].QuantityR < emo[g].QuantityR)
        {
            temp=emo[g];
            emo[g]=emo[g+1];
            emo[g+1]=temp;
        }
    }
}

3. 其他潜在问题修复

  • bff变量类型错误与未初始化:char bff需改为int bff,因为EOF是int类型的特殊值,char类型存储范围不足会导致判断失效;同时需要先给bff赋初始值再进入循环,避免第一次判断时读取随机值。
  • 读文件逻辑错误:当前写法在fscanf读取失败的情况下仍然会给i计数,建议把fscanf的返回值作为循环判断条件,参考写法:
    // 字符串数组名本身就是指针,无需额外加&符号
    while (fscanf(fp, "%d %s %s %s %d %lf", &emo[i].IDd, emo[i].supply, emo[i].Scode, emo[i].Cdonator, &emo[i].Nship, &emo[i].QuantityR) == 6) {
        i++;
    }
    
  • 禁止在自定义函数内直接调用main():文件打开失败直接调用main()会导致栈溢出风险,应该改为返回错误码后在主函数中做退出处理。

内容的提问来源于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:15:04