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

C语言结构体数组按name字段排序无效问题排查求助

问题排查:结构体数组按name排序未生效的原因

嘿,我一眼就瞅到你排序逻辑里的问题啦——内层循环的变量和条件写错了,这直接导致你的排序代码根本没按预期执行!

错误点分析

你原来的排序循环是这样的:

for (int r = 0; r < k - 1; r++) {
    for (int s = r + 1; r < k; r++) {  // 这里出问题了!
        if (strcmp(student[r].name, student[s].name) > 0) {
            struct person temp = student[r];
            student[r] = student[s];
            student[s] = temp;
        }
    }
}

看到没?内层循环的条件写的是r < k,而且每次迭代是r++——这相当于你在内层循环里直接修改了外层循环的变量r,内层循环的s变量根本没动过!结果就是外层循环的r会被快速递增,跳过大部分轮次,而且每次只比较了student[r]和student[r+1]一次,完全没实现冒泡排序需要的“逐个比较后续元素”的逻辑。

修正后的排序代码

把内层循环的变量和条件改成s相关的就好了:

for (int r = 0; r < k - 1; r++) {
    for (int s = r + 1; s < k; s++) {  // 这里改成s < k,s++
        if (strcmp(student[r].name, student[s].name) > 0) {
            struct person temp = student[r];
            student[r] = student[s];
            student[s] = temp;
        }
    }
}

这样内层循环会从r+1开始,逐个遍历到数组末尾的s,每次比较student[r]和student[s]的name,只要前者更大就交换,真正实现按name升序排序的逻辑。

额外小提醒

虽然你说读取数据没问题,但还是可以确认下sscanf的格式字符串:" %99[^,], %99[^,], %19[^,], %d"里的逗号和空格是否和你txt文件里的分隔格式完全匹配,避免因为读取数据时的格式问题导致排序异常(不过这次的核心问题肯定是循环写错啦)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:45:40