65,210
社区成员
发帖
与我相关
我的任务
分享
//把你的main函数改了改
void main()
{
FILE *fp;
int len,t;
int i;
int flag=1;
struct stu *tou=NULL;
len=sizeof(struct stu);
if((fp=fopen("E:\\123.txt","wt+"))==NULL)
{
printf("\n error on open E:\\123.txt file! \n");
exit(1);
}
fp=fopen("E:\\123.txt", "wt+");
while(flag==1)
{
printf("1 for read. 2 for insert. 3 for delete. 4 for sequence. 5 for write.\nPlease Choose One:");
scanf("%d",&i);
switch(i)
{
case 1:
{
struct stu *temp,*t1;
while(!feof(fp))
{
temp=(struct stu *) malloc(len);
fscanf(fp,"%ld %s %f",&temp->num,temp->name,&temp->score);
tou=Insert(tou,temp);
}
t1=tou;
do
{
printf("Number Name score");
printf("%6ld %s %f\n",t1->num,t1->name,t1->score);
t1=t1->next;
} while(t1!=NULL);
}
break;
case 2:
{
struct stu *s,*t2;
s=(struct stu *) malloc(len);
printf("the num");
scanf("%ld",&s->num);
printf("the name");
scanf("%s",s->name);
printf("the score");
scanf("%f",&s->score);
tou=Insert(tou,s);
t2=tou;
while(t2!=NULL)
{
printf("Number Name score");
printf("%6ld %s %f",t2->num,t2->name,t2->score);
t2=t2->next;
}
}
break;
case 3:
{
struct stu *t3;
long k;
printf("tne num to delete");
scanf("%d",&k);
tou=Delete(tou,k);
t3=tou;
while(t3!=NULL)
{
printf("Number Name score");
printf("%d %s %f",t3->num,t3->name,t3->score);
t3=t3->next;
}
}
break;
case 4:
sequence(tou);
break;
case 5:
filewrite(tou,fp);
break;
}
printf("\nQuit or not \n 1 for Yes. 2 for No");
scanf("%d",&t);
if(t==1)
flag=0;
else
if(t==2)
flag=1;
else
{
printf("error\n");
flag=1;
}
}
fclose(fp);
} #include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
#define MAX_NAME 30 //新加
struct stu
{
int num;
char name[MAX_NAME]; //新加
float score;
struct stu *next;
};
struct stu *Delete(struct stu *tou, int n)
{
struct stu *p1, *p2;
p1=tou;
if(p1->num==n)
tou=p1->next;
else
{
do
{
p2=p1;
p1=p1->next;
}
while(p1!=NULL && p1->num!=n);
if(p1->num==n)
p2->next=p1->next;
else printf("Not be found!\n");
}
free(p1);
return(tou);
}
struct stu *Insert(struct stu *tou, struct stu *s)
{
struct stu *p1, *p2;
p2=p1=tou;
if (tou==NULL)
{tou=s;s->next=NULL;}
else if(s->num <p1->num)
{
s->next=tou;
tou=s;
}
else if(s->num>p1->num)
{
while(s->num>p1->num&&p1->next!=NULL)
{
p2=p1; p1=p1->next;
}
if(s->num <p1->num)
{
p2->next=s; s->next=p1;
}
else if(s->num>p1->num)
{
p1->next=s;
s->next=NULL;
}
}
return(tou);
}
struct stu *Insert2(struct stu *tou, struct stu *s)
{
struct stu *p1, *p2;
p2=p1=tou;
if (tou==NULL)
{tou=s;}
else if(s->score <=p1->score)
{
s->next=tou;
tou=s;
}
else if(s->score>p1->score)
{
while(s->score>p1->score&&p1->next!=NULL)
{
p2=p1; p1=p1->next;
}
if(s->score <=p1->score)
{
p2->next=s; s->next=p1;
}
else if(s->score>p1->score)
{
p1->next=s;
s->next=NULL;
}
}
return(tou);
}
void sequence(struct stu *tou)
{
struct stu *p1, *p2;
p1=tou;
while(p1!=NULL)
{
p2=Insert2(p2,p1);
p1=p1->next;
}
while(p2!=NULL)
{
printf("%ld %10s %d\n",p2->num,p2->name,p2->score); //printf("%ld %10s %d",p2->num,p2->name,p2->score);
p2=p2->next;
}
}
void filewrite(struct stu *tou,FILE *fp)
{
struct stu *p1;
p1=tou;
while(p1!=NULL)
{
fprintf(fp,"%d %s %f\n",p1->num,p1->name,p1->score); //fprintf(fp,"%d %s %f",p1->num,p1->name,p1->score);
printf("Number Name score\n"); //printf("Number Name score");
printf("%6ld %s %f\n",p1->num,p1->name,p1->score); //printf("%6ld %s %f",p1->num,p1->name,p1->score);
p1=p1->next;
}
}
void main()
{
FILE *fp;
int len;
char i;
int flag=1;
struct stu *tou=NULL;
len=sizeof(struct stu);
if((fp=fopen("E:\\123.txt","wt+"))==NULL)
{
printf("\n error on open E:\\123.txt file! \n");
exit(1);
}
fp=fopen("E:\\123.txt", "wt+");
while(flag==1)
{
//移到这里,每次有提示
printf("1 for read. 2 for insert. 3 for delete. 4 for sequence. 5 for write.\nPlease Choose One:");
scanf("%c",&i);
switch(i)
{
case '1':
struct stu temp, *t1;
while (fscanf(fp,"%ld %s %f",&temp.num,temp.name,&temp.score)==3)
{
struct stu *temp2=(struct stu *) malloc(len);
*temp2 = temp;
tou=Insert(tou,temp2);
}
t1=tou;
while(t1!=NULL)
{
printf("Number Name score\n"); //printf("Number Name score");
printf("%6ld %s %f\n",t1->num,t1->name,t1->score); //printf("%6ld %s %f\n",t1->num,t1->name,t1->score);
t1=t1->next;
}
break;
case '2':
struct stu *s,*t2;
s=(struct stu *) malloc(len);
printf("the num");
scanf("%ld",&s->num);
printf("the name");
scanf("%s",s->name);
printf("the score");
scanf("%f",&s->score);
tou=Insert(tou,s);
t2=tou;
while(t2!=NULL)
{
printf("Number Name score\n"); //printf("Number Name score");
printf("%6ld %s %f\n",t2->num,t2->name,t2->score); //printf("%6ld %s %f",t2->num,t2->name,t2->score);
t2=t2->next;
}
break;
case '3':
struct stu *t3;
long k;
printf("tne num to delete");
scanf("%d",&k);
tou=Delete(tou,k);
t3=tou;
while(t3!=NULL)
{
printf("Number Name score\n");//printf("Number Name score");
printf("%6ld %s %f\n",t3->num,t3->name,t3->score); //printf("%6ld %s %f",t3->num,t3->name,t3->score);
t3=t3->next;
}
break;
case '4':
sequence(tou);
break;
case '5':
filewrite(tou,fp);
break;
} //新加
int t;
printf("Quit or not \n 1 for Yes. 2 for No");
scanf("%d",&t);
if(t==1)
flag=0;
else if(t==2)
flag=1;
else
{//新加
printf("error");
flag=1;
}//新加
fflush(stdin);//新加
}
fclose(fp);
}
case '1':
struct stu *t1;
while(!feof(fp))
{
struct stu temp;
if (fscanf(fp,"%ld %s %f",&temp.num,temp.name,&temp.score)==3)
{
struct stu *temp2=(struct stu *) malloc(len);
*temp2 = temp;
tou=Insert(tou,temp2);
}
}
t1=tou;
while(t1!=NULL)
{
printf("Number Name score");
printf("%6ld %s %f\n",t1->num,t1->name,t1->score);
t1=t1->next;
}
break;