【问题标题】:Sort a list of members in ascending and descending order按升序和降序对成员列表进行排序
【发布时间】:2021-10-06 13:17:09
【问题描述】:

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

如果用户点击“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);

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

  • Lo​​l Ipop,7802034567,全职
  • 安娜香蕉,9901024356,兼职

然后想要显示按名字排序的学生,会发生这种情况:

  • Anna Ipop,7802034567,全职
  • Lo​​l Banana,9901024356,兼职

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

【问题讨论】:

    标签: c database sorting


    【解决方案1】:

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

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

    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));
    }
    

    代码未经测试...

    【讨论】:

      猜你喜欢
      • 2016-10-18
      • 2020-10-05
      • 1970-01-01
      • 2020-11-09
      • 2018-05-03
      • 1970-01-01
      • 2015-08-30
      • 1970-01-01
      相关资源
      最近更新 更多