【发布时间】: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调用,从外观上看,这并不是必需的,因为fname和lname都是char*,而不是数组。不管怎样,something like this.