void sort()
{
FILE* fp;
int a=0;
char na[10],i[10],j[10];
char clas[10],stu_code[15],id_code[20];
char sex[5], enyear[10], birthday[20], major[20], name[10];
struct stu_node* tail = NULL, * head = NULL, * pMove = NULL, * n = NULL,* pNext = NULL,temp= NULL;
if ((fp = fopen("test.dat", "r")) == NULL)
{
fp = fopen("test.dat", "w+");
fclose(fp);
return;
}
while (1)
{
if (fscanf(fp,"%s%s%s%s%s%s%s%s\n", name, sex, major, clas,
birthday, stu_code, id_code, enyear) != 8) break;
n = (struct stu_node)malloc(sizeof(struct stu_node));
n->next = NULL;
strcpy(n->clas,clas);strcpy(n->stu_code,stu_code);
strcpy(n->id_code,id_code);
strcpy(n->name, name); strcpy(n->sex, sex);
strcpy(n->major, major); strcpy(n->enyear, enyear);
strcpy(n->birthday, birthday);
if (head == NULL)
head = n;
else
tail->next = n;
tail = n;
}
fclose(fp);
while(a!=3)
{
printf("----------1.按班级排序-------------\n");
printf("----------2.按学籍号码排序----------\n");
printf("----------3.退出------------------\n");
scanf("%d",&a);
switch(a)
{
case 1: pMove=head;
while(pMove)
{
pNext = pMove->next;
while (pNext != NULL)
{
if (strcmp(pMove->clas, pNext->clas) > 0)
{
temp->clas = pMove->clas;
pMove->clas = pNext->clas;
pNext->clas = temp->clas;
}
pNext = pNext->next;
}
pMove = pMove->next;
}
pMove = head->next;break;
case 2:
pMove=head;
while(pMove!=NULL)
{
pMove=pMove->next;
}break;
case 3:printf("退出排序!\n");return;
default :printf("输入错误,请重新输入!\n");
}
pMove=head;
while (pMove != NULL)
{
printf("%5s%5s%20s%5s%20s%20s%20s%10s\n", pMove->name, pMove->sex, pMove->major,
pMove->clas, pMove->birthday, pMove->stu_code, pMove->id_code, pMove->enyear);
pMove = pMove->next;
}
}
}
修改如下,供参考:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct dat {
char name[5];
char sex[5];
char major[20];
char clas[5];
char birthday[20];
char stu_code[20];
char id_code[20];
char enyear[10];
}Data;
typedef struct lnode {
Data data;
struct lnode* next;
}LNode;
void sort()
{
FILE* fp;
int a = 0;
char na[10], i[10], j[10];
char clas[10], stu_code[15], id_code[20];
char sex[5], enyear[10], birthday[20], major[20], name[10];
LNode* tail = NULL, * head = NULL, * pMove = NULL, * n = NULL, * pNext = NULL;
Data temp;
if ((fp = fopen("test.dat", "r")) == NULL)
{
printf("open file fail!\n");
return;
}
while (1)
{
if (fscanf(fp, "%s %s %s %s %s %s %s %s\n", name, sex, major, clas,
birthday, stu_code, id_code, enyear) != 8) break;
n = (LNode*)malloc(sizeof(LNode));
n->next = NULL;
strcpy(n->data.clas, clas); strcpy(n->data.stu_code, stu_code);
strcpy(n->data.id_code, id_code);
strcpy(n->data.name, name); strcpy(n->data.sex, sex);
strcpy(n->data.major, major); strcpy(n->data.enyear, enyear);
strcpy(n->data.birthday, birthday);
if (head == NULL)
head = n;
else
tail->next = n;
tail = n;
}
fclose(fp);
while (a != 3)
{
printf("----------1.按班级排序-------------\n");
printf("----------2.按学籍号码排序----------\n");
printf("----------3.退出------------------\n");
scanf("%d", &a);
switch (a)
{
case 1:
pMove = head;
while (pMove)
{
pNext = pMove->next;
while (pNext != NULL)
{
if (strcmp(pMove->data.clas, pNext->data.clas) > 0)
{
temp= pMove->data;
pMove->data = pNext->data;
pNext->data = temp;
}
pNext = pNext->next;
}
pMove = pMove->next;
}
break;
case 2:
pMove = head;
while (pMove)
{
pNext = pMove->next;
while (pNext != NULL)
{
if (strcmp(pMove->data.id_code, pNext->data.id_code) > 0)
{
temp = pMove->data;
pMove->data = pNext->data;
pNext->data = temp;
}
pNext = pNext->next;
}
pMove = pMove->next;
}
break;
case 3:printf("退出排序!\n"); return;
default:printf("输入错误,请重新输入!\n"); break;
}
pMove = head;
while (pMove != NULL)
{
printf("%5s%5s%20s%5s%20s%20s%20s%10s\n", pMove->data.name,
pMove->data.sex, pMove->data.major, pMove->data.clas,
pMove->data.birthday, pMove->data.stu_code,
pMove->data.id_code, pMove->data.enyear);
pMove = pMove->next;
}
}
}
这个是一个排序函数,如果想要运行,你需要写一个main函数,因为main函数是程序的入口,然后调用这个排序函数