Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中对文件中的数组进行排序_C_File_Sorting_Compare - Fatal编程技术网

在C中对文件中的数组进行排序

在C中对文件中的数组进行排序,c,file,sorting,compare,C,File,Sorting,Compare,我正试图从一个文件中整理学生的信息。他们的信息包括名字、姓氏和身份证号码。我已经按学生的姓对他们进行了分类。我通过交换他们的名字来比较他们。我得到的结果是,姓氏和对应的名字被排序,然而,交换了id号后,学生对应的id号仍然没有排序。请给我一些帮助。提前谢谢 排序功能 void sorting () { system("cls"); printf("\n\n\t\t\t"); t(); printf("\n"); struct records st

我正试图从一个文件中整理学生的信息。他们的信息包括名字、姓氏和身份证号码。我已经按学生的姓对他们进行了分类。我通过交换他们的名字来比较他们。我得到的结果是,姓氏和对应的名字被排序,然而,交换了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);

        }
//  }
}
void排序()
{
系统(“cls”);
printf(“\n\n\t\t\t”);
t();
printf(“\n”);
结构记录学生[1000];
char-fname[15];
字符名称[15],温度[15];
intid,i,j,n,IDnum;
ATND=fopen(“学生ID号.txt”,“r+”);
倒带(ATND);
对于(i=0;i<1000;i++)
{//循环的开始
if(fscanf(ATND,“%s%s%d”,fname,lname,&id)!=3)//读取文件的内容
打破
//将读取的数据存储到变量中
学生[i].fname=strdup(fname);
学生[i].lname=strdup(lname);
学生[i].id=id;
}//结束for循环
fclose(ATND);
对于(j=1;j0)
{
strcpy(临时,学生[n-1].lname);
strcpy(学生[n-1].lname,学生[n].lname);
strcpy(学生[n].l姓名,临时);
strcpy(临时,学生[n-1].fname);
strcpy(学生[n-1].fname,学生[n].fname);
strcpy(学生[n].fname,temp);
}
}
}
对于(j=0;j
比较id而不是比较lname。
if(strcmp(student[n-1].id,student[n].id)>0)

如果您知道如何比较学生姓名,为什么不能对学生编号应用相同的技术?如果您需要帮助,您需要准确地解释是什么阻止您继续编写代码。您需要交换
id
,例如
int x=student[n-1].id;学生[n-1].id=student[n].id;学生[n].id=xstrcpy
调用,从外观上看,这些调用都不是必需的,因为
fname
lname
都是
char*
,而不是数组。不管