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
相关产品推荐
相关产品推荐

