求教 为什么会出现乱码
#include <stdio.h>
#include <string.h>
#include <malloc.h>
typedef struct
{
char name[20];
char number[15];
float Chinese;
float Math;
float English;
float average;
}DATA;
typedef struct node
{
DATA data;
struct node *next;
}Linklist;
Linklist *LinklistAdd( Linklist *head, DATA data )
{
Linklist *node;
node = (Linklist*)malloc(sizeof(Linklist));
node->data.Chinese = data.Chinese;
node->data.Math = data.Math;
node->data.English = data.English;
strcpy(node->data.number, data.number);
strcpy(node->data.name, data.name);
if( head == NULL )
{
head = node;
head->next = NULL;
}
else
{
node->next = head->next;
head->next = node;
}
return head;
}
Linklist *LinklistFind( Linklist *head, char *findnumber )
{
Linklist *h;
h = head;
while( h )
{
if( strcmp(h->data.name, findnumber) == 0 )
return h;
h = h->next;
}
return NULL;
}
int LinklistDelete( Linklist *head, char *number )
{
Linklist *node, *h, *temp;
int flag = 1;
node = h = head;
while( h )
{
if( strcmp(h->data.name, number) == 0 )
{
if(flag == 1)
{
temp = h->next;
free(h);
h = temp;
return 1;
}
else
{
flag = 0;
temp = h->next;
free(h);
node->next = temp;
h = temp;
return 1;
}
}
else
{
if( flag == 1)
{
h = h->next;
flag = 0;
}
else
{
node = h;
h = h->next;
}
}
}
printf("\n没有找到姓名为%s的学生信息!\n", number);
return 0;
}
void LinklistDisplay(Linklist *head)
{
Linklist *h=head;
DATA *data;
while(h)
{
data=&h->data;
printf("%10s%10s%10s%10s%10s%10s\n","姓名","学号","语文成绩","数学成绩","英语成绩","平均成绩");
printf("**************************************************************\n");
printf("%10s%10s%10g%10g%10g%10g\n",data->name, data->number, data->Chinese, data->Math, data->English, data->average);
h=h->next;
}
}
Linklist* Input(Linklist *head)
{
Linklist *u = (Linklist*)malloc(sizeof(Linklist));
printf ("请输入添加学生的信息:\n");
printf("请输入姓名:");
scanf("%s",u->data.name);
printf("请输入学号: ");
scanf("%s",u->data.number);
printf("请输入语文成绩: ");
scanf("%f",&u->data.Chinese);
printf("请输入数学成绩: ");
scanf("%f",&u->data.Math);
printf("请输入英语成绩: ");
scanf("%f",&u->data.English);
u->data.average = (u->data.Chinese + u->data.English + u->data.Math)/3;
Linklist *h = head,*t = NULL;
while(h)
{
if(h->data.average < u->data.average)
break;
else
{
t = h;
h = h->next;
}
}
u->next = h;
if( !t )
return u;
t->next = u;
return head;
}
void Find(Linklist *head)
{
DATA data;
char name[20];
Linklist *h;
printf("请输入要查找的学生的姓名:");
scanf("%s", name);
h = LinklistFind(head, name);
if( h )
{
data = h->data;
printf("要查找的学生的信息为:\n");
printf("%10s%10s%10s%10s%10s%10s\n","姓名","学号","语文成绩","数学成绩","英语成绩","平均成绩");
printf("**************************************************************\n");
printf("%10s%10s%10g%10g%10g%10g\n",data.name, data.number, data.Chinese, data.Math, data.English, data.average);
}
else
{
printf("\t没有找到姓名为%s的学生信息!\n", name);
}
}
void Delete(Linklist *head)
{
char name[20];
printf("请输入要删除的学生的姓名:");
scanf("%s", name);
LinklistDelete(head, name);
}
void write(Linklist *head)
{
FILE *fp;
Linklist *p;
fp=fopen("c:\\1.txt","w");
p=head;
while(p!=NULL)
{
fprintf(fp,"%s %s %g %g %g %g\n",p->data.name, p->data.number, p->data.Chinese, p->data.Math, p->data.English, p->data.average);
printf("%s %s %g %g %g %g\n",p->data.name, p->data.number, p->data.Chinese, p->data.Math, p->data.English, p->data.average);
p=p->next;
}
fclose(fp);
}
Linklist* read(Linklist *head)
{
Linklist *p1,*p2;
FILE *fp;
fp=fopen("c:\\1.txt","r");
p1=p2=head=NULL;
int x=1;
while(!feof(fp))
{
p1=(Linklist *)malloc(sizeof(Linklist));
fscanf(fp,"%s%s%f%f%f%f",p1->data.name, p1->data.number, &p1->data.Chinese, &p1->data.Math, &p1->data.English, &p1->data.average);
if(p2) p2->next=p1;
if(x==1) head=p1;
x++;
p2=p1;
}
p2->next=NULL;
fclose(fp);
return head;
}
int main()
{
Linklist *head = NULL;
head=read(head);
int option=1;
while(option!=5)
{
printf("\n*********************************\n");
printf("|\t \t|\n");
printf("|\t1.添加学生的信息\t|\n");
printf("|\t \t|\n");
printf("|\t2.按成绩排序 \t|\n");
printf("|\t \t|\n");
printf("|\t3.查找学生的信息\t|\n");
printf("|\t \t|\n");
printf("|\t4.删除学生的信息\t|\n");
printf("|\t \t|\n");
printf("|\t5.退出 \t|\n");
printf("|\t \t|\n");
printf("*********************************\n");
printf("\n请选择:");
scanf("%d",&option);
switch(option)
{
case 1:
Input(head);
break;
case 2:
LinklistDisplay(head);
break;
case 3:
Find(head);
break;
case 4:
Delete(head);
break;
case 5:
break;
default:
break;
}
getchar();
}
write(head);
return 0;
}