【问题标题】:Sorting Arrays from a file in C从C中的文件中对数组进行排序
【发布时间】:2016-04-09 05:42:21
【问题描述】:

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

排序功能

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

        }
//  }
}

【问题讨论】:

  • 如果您知道如何比较学生姓名,为什么不能将相同的技术应用于学生编号?如果您需要帮助,您需要准确解释是什么阻碍了您继续编写代码。
  • 你需要交换id,例如int x=student[n-1].id; student[n-1].id=student[n].id; student[n].id=x;
  • 对此我感到非常抱歉。我实际上尝试了与上面提到的完全相同的方法@user3386109,但是,id 号仍然没有排序
  • 您应该使用完整的结构分配而不是那些 strcpy 调用,从外观上看,这并不是必需的,因为 fnamelname 都是 char*,而不是数组。不管怎样,something like this.

标签: c file sorting compare


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-19
    • 2013-06-06
    • 1970-01-01
    • 2011-04-23
    • 2013-12-24
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多