如何基于关联整型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
相关产品推荐
相关产品推荐

