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

如何基于关联整型ID升序排序字符数组并保持ID与用户名绑定对应

问题根因

你当前排序逻辑仅交换了结构体的ID字段,没有同步交换绑定的姓名字段,导致排序后ID和用户名的对应关系错乱。

修复后的代码

#include <string.h> // 若已引入可忽略该行

void myGameDetails() {
    int i, j, k;
    // 分别定义ID、姓名的临时交换变量
    int tempId;
    char tempName[256]; // 可根据你实际姓名字段的最大长度调整
    
    if (counter > 0) {
        for (j = 0; j < counter; ++j) {
            for (k = j + 1; k < counter; ++k) {
                if (userDetails[j].ID > userDetails[k].ID) {
                    // 交换ID字段
                    tempId = userDetails[j].ID;
                    userDetails[j].ID = userDetails[k].ID;
                    userDetails[k].ID = tempId;
                    // 同步交换对应的姓名字段
                    strcpy(tempName, userDetails[j].Name);
                    strcpy(userDetails[j].Name, userDetails[k].Name);
                    strcpy(userDetails[k].Name, tempName);
                }
            }
        }
        // 原代码把标题打印放在了循环里会重复输出,已移到循环外
        printf("IDs in ascending order\n");
        for (i = 0; i < counter; ++i) {
            printf("ID: %d\n", userDetails[i].ID);
            printf("Your name: %s", userDetails[i].Name);
        }
    }
}

补充说明

  • 原代码重复定义了temp变量,已删除冗余定义
  • 如果你的姓名字段是动态分配的char*类型,交换时直接交换指针即可,不需要用strcpy,写法如下:
char *tempNamePtr;
tempNamePtr = userDetails[j].Name;
userDetails[j].Name = userDetails[k].Name;
userDetails[k].Name = tempNamePtr;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:27:01