繁体   English   中英

从C中的文件排序数组

[英]Sorting Arrays from a file in C

我正在尝试从档案学生的信息中进行排序。 他们的信息包括名字,姓氏和身份证号码。 我已经按学生的姓对他们进行了排序。 我通过交换它们的名称来比较它们的名称。 我得到的结果是姓氏和相应的名字已排序,但是,交换了ID号后,学生的相应ID号仍然保持未排序状态。 请给我一些帮助。 提前致谢。

分拣功能

 void sorting ()
{
        system("cls");
    printf("\n\n\t\t\t");
    t();
    printf("\n");
    struct records student[1000];

    char fname[15];
    char lname[15],temp[15];
    int id, i, j, n, IDnum;
    ATND = fopen("Student ID Numbers.txt","r+");
        rewind(ATND);
        for (i = 0; i < 1000 ; i++)
        {                                                   //Beginning for loop
            if (fscanf(ATND, "%s %s %d", fname, lname,  &id) != 3)  //Reads the contents of the file
            break;
            //Storing the read data into variables

            student[i].fname = strdup(fname);
            student[i].lname = strdup(lname);
            student[i].id = id;
        }                                                   //Ending the for loop
    fclose(ATND);


    for (j = 1; j < i; j++) 
    {
        for (n = 1; n < i; n++) 
       {    

    if (strcmp(student[n - 1].lname, student[n].lname) > 0)
            {
                strcpy(temp, student[n - 1].lname);
                strcpy(student[n - 1].lname, student[n].lname);
                strcpy(student[n].lname, temp);

            strcpy(temp, student[n - 1].fname);
            strcpy(student[n - 1].fname, student[n].fname);
            strcpy(student[n].fname, temp);

}
}
}


        for (j=0; j < i; j++)
    {
    //  if(student[j].id == IDnum)
    //  {

        //  printf("\nID number: %d", student[j].id);
        //  printf("\nName: %s %s\n", student[j].fname, student[j].lname);
    printf("%-15s %-20s %-20d", student[j].fname, student[j].lname,  student[j].id);

        }
//  }
}

不要比较lname,而是比较id。 if (strcmp(student[n - 1].id, student[n].id) > 0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM