#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; } } } 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; } } } 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; } } } break; default: break; } return 0; }为什么排序没有成功
时间: 2024-03-02 15:53:46 浏览: 23
在排序的三个循环中,内层循环中的变量i没有被定义,应该改为k。同时,在进行交换操作时,应该将k+1的元素赋值给k位置的元素,而不是将k位置的元素赋值给k+1位置的元素。修改后的代码如下:
```
#include <stdio.h>
#include <string.h>
#include <stdlib.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-j-1;k++) {
if(strcmp(Student[k].czName, Student[k+1].czName) > 0) {
a=Student[k+1];
Student[k+1]=Student[k];
Student[k]=a;
}
}
}
break;
case 2:
for(j=0;j<nCount-1;j++) {
for(k=0;k<nCount-j-1;k++) {
if(strcmp(Student[k].czNumber, Student[k+1].czNumber) > 0) {
a=Student[k+1];
Student[k+1]=Student[k];
Student[k]=a;
}
}
}
break;
case 3:
for(j=0;j<nCount-1;j++) {
for(k=0;k<nCount-j-1;k++) {
if(strcmp(Student[k].guli, Student[k+1].guli) > 0) {
a=Student[k+1];
Student[k+1]=Student[k];
Student[k]=a;
}
}
}
break;
default:
break;
}
return 0;
}
```