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

如何交换结构体数组元素?C语言动态结构体数组冒泡排序交换失效求助

问题根因
  • 你的代码核心错误是if(st[j].sum < st[j+1].sum);这行末尾多了一个多余的分号。
  • C语言中单独的分号属于空语句,此处的分号会直接结束if判断的逻辑分支:当if条件成立时仅执行空语句,后续大括号包裹的交换逻辑完全不受if条件控制,每轮内层循环都会无条件交换相邻的两个结构体元素。
  • 整套冒泡逻辑运行完后,数组会被完整反转,所以你看到的输出始终是输入顺序的倒序,和你要的总分降序排序逻辑完全无关。
修复方法

直接删除if判断末尾的分号即可,修改后的对应代码段如下:

for(i=0;i<(n-1);i++)
{
    for(j=0;j<(n-i-1);j++)
    {
        // 删掉了末尾的分号,交换逻辑现在受if条件控制
        if(st[j].sum < st[j+1].sum)
        {
            temp = st[j];
            st[j] = st[j+1];
            st[j+1] = temp;
        }
    }
}
可选优化点(非必须,仅提升代码规范性)
  • void main不是C标准的主函数写法,建议改为int main(),函数末尾添加return 0;
  • conio.h是Windows平台特有的非标准头文件,getch()也不属于标准库函数,如果需要跨平台兼容可以删除conio.h引用,把getch()替换为标准的getchar()
  • 读取字符串的scanf参数&st[i].name写法不规范,name本身是字符数组名,自动退化为指针,不需要加取地址符&,直接写st[i].name即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:09:03