#include <stdio.h> #define MAX 100 // 最大学生数量 struct Student { char czName[20]; // 学生姓名 char czNumber[20]; // 学生学号 char guli[8]; }; int main() { FILE* fp = fopen("students.txt", "r+"); if (fp == NULL) { printf("Failed to open file!\n"); exit(0); } struct Student Student[MAX]; // 定义结构体数组 int i=0; int nCount=0; int m,j,k; struct Student a; while (fscanf(fp,"%s %s %s", Student[i].czName,Student[i].czNumber,Student[i].guli) ==3) { nCount++; // i++; } fclose(fp); // 打印学生信息 for (i = 0; i < nCount; i++) { printf("%s %s %s\n", Student[i].czName, Student[i].czNumber, Student[i].guli); } printf("Sort\n"); printf("1,Sort by name\n"); printf("2,Sort by Number\n"); printf("3,Sort by room\n"); scanf("%d",&m); switch(m) { case 1: for(j=0;j<nCount-1;j++) { for(k=0;k<nCount-i-1;k++) { if(strcmp(Student[j].czName, Student[j+1].czName) > 0) { a=Student[k]; Student[k+1]=Student[k]; Student[k]=a; } } } for (i = 0; i < nCount; i++) { printf("%s %s %s\n", Student[i].czName, Student[i].czNumber, Student[i].guli); }break; case 2: for(j=0;j<nCount-1;j++) { for(k=0;k<nCount-i-1;k++) { if(strcmp(Student[j].czNumber, Student[j+1].czNumber) > 0) { a=Student[k]; Student[k+1]=Student[k]; Student[k]=a; } } } for (i = 0; i < nCount; i++) { printf("%s %s %s\n", Student[i].czName, Student[i].czNumber, Student[i].guli); }break; case 3: for(j=0;j<nCount-1;j++) { for(k=0;k<nCount-i-1;k++) { if(strcmp(Student[j].guli, Student[j+1].guli) > 0) { a=Student[k]; Student[k+1]=Student[k]; Student[k]=a; } } } for (i = 0; i < nCount; i++) { printf("%s %s %s\n", Student[i].czName, Student[i].czNumber, Student[i].guli); }break; default: break; } return 0; }为什么没显示排序好的信息
时间: 2024-03-02 22:52:29 浏览: 52
基于c语言的学生成绩管理系统的入门学习代码可用于课程设计
根据您提供的代码,我看到您进行了排序操作,但是在排序后并没有重新将排序后的结果写回到文件中,因此在打印学生信息时,仍然是读取的原始文件内容,没有进行排序后的更新。您需要在排序完成后,将排序后的结果写回到文件中,以便下次读取时能够获取到排序后的结果。您可以使用类似以下的代码将排序后的结果写回到文件中:
```c
fp = fopen("students.txt", "w");
if (fp == NULL) {
printf("Failed to open file!\n");
exit(0);
}
for (i = 0; i < nCount; i++) {
fprintf(fp, "%s %s %s\n", Student[i].czName, Student[i].czNumber, Student[i].guli);
}
fclose(fp);
```
这样,在下次读取文件时,您就可以得到排序后的结果了。
阅读全文