C语言 按升序和降序对成员列表进行排序



我正在创建一个包含学生的简单数据库,其中包含以下信息:名字,姓氏,个人号码,学习类型(永久或兼职学生)。

如果用户点击"showasc"程序询问是否按学生的姓或名升序显示。

设法按名字对成员进行排序,但问题是只有名字被排序,而关于学生的其他信息没有,它保持在创建时的顺序。请记住,我对编程还是个新手。

这是对名称进行排序的代码部分:

else if(strcmp(command, "showasc") == 0)  
{
char input[15]; 
printf("Show in ascendant order by first name or last name?n ");
scanf("%s", input);

struct Student copyOfListOfStudents[20];
memcpy(&copyOfListOfStudents, &listOfStudents, sizeof(listOfStudents));
int i, j;
char s[100];
for(i=0;i<20;i++)
{
for(j=i+1;j<20;j++)
{
if(copyOfListOfStudents[i].valid  &&  copyOfListOfStudents[j].valid)
{
if(strcmp(copyOfListOfStudents[i].firstName,copyOfListOfStudents[j].firstName) > 0)
{
strcpy(s,copyOfListOfStudents[i].firstName);
strcpy(copyOfListOfStudents[i].firstName,copyOfListOfStudents[j].firstName);
strcpy(copyOfListOfStudents[j].firstName,s);
}
}
else
break;
}
}
printStudents(copyOfListOfStudents);

例如,如果用户添加以下学生:

  • Lol Ipop, 7802034567, Full time
  • Anna Banana, 9901024356, Part time

然后要显示按名字排序的学生,结果如下:

  • Anna Ipop, 7802034567,全职
  • Lol Banana, 9901024356, Part time

如何解决这个问题?(我希望我给的代码就足够了!)

您已经发现了问题所在。在您的排序算法中,名称被排序,但其他值不被排序。

要解决这个问题,您需要更改此部分以交换整个student结构:

if(strcmp(copyOfListOfStudents[i].firstName,copyOfListOfStudents[j].firstName) > 0)
{
Student tmp;
memcpy(tmp, copyOfListOfStudents[i], sizeof(Student));
memcpy(copyOfListOfStudents[i], copyOfListOfStudents[j], sizeof(Student));
memcpy(copyOfListOfStudents[j], tmp, sizeof(Student));
}

代码未经测试…

相关内容

  • 没有找到相关文章