#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct dt{
int student;
char course[20];
int score;
struct dt *next;
};
struct dt *head;
void load_file()
{
FILE *file= fopen("data.txt","r");
int s;
char c[20];
int sc;
head=NULL;
while(fscanf(file,"%d %s %d", &s,c,&sc)!=EOF){
struct dt *n;
printf("%d %s %d\n",s,c,sc);
n=(struct dt *)malloc(sizeof(struct dt));
n->student=s;
strcpy(n->course,c);
n->score=sc;
n->next=head;
head=n;
}
}
void remove_one(struct dt *d){
struct dt *p,*prev;
if(head==d){
head=d->next;
}
prev=head;
for(p=head->next;p!=NULL;prev=p,p=p->next){
if(p==d){
prev->next=d->next;
return;
}
}
}
void sort_list(){
struct dt *p,*t;
struct dt *min=head;
if(head==NULL
){
return;
}
for(p=head->next;p!=NULL;p=p->next){
if(min->student > p->student){
min=p;
}
}
remove_one(min);
sort_list();
min->next=head;
head=min;
printf("%d\n",p->student);
return;
}
void print_average(){
int count=0,total=0;
struct dt *p;
for(p=head;p!=NULL;p=p->next){
if(p->student == p->next->student){
count++;
total+=p->score;
}else{
count++;
total+=p->score;
printf("%d %d %d\n",p->student,count,total/count);
count=total=0;
}
}
}
void print(){
struct dt *p;
for(p=head;p!=NULL;p=p->next){
printf("%d %s %d\n",p->student,p->course,p->score);
}
}
int main(void){
int i;
struct dt *p;
int s;
while(1){
printf("select 1:load 2:remove 3:print 0ther:finish\n");
scanf("%d",&s);
switch(s){
case 1:load_file();break;
case 2:for(i=0,p=head;i<3;p=p->next,i++){
p=p->next;
}
remove_one(p);
break;
case 3:print();break;
case 4:sort_list();print();break;
default:exit(1);
}
}
return 0;
}
min->next=head;
head=min;
がうまく動作していないのですが。この二つを変更させてうまく動作させる場合どのような解決策があるか教えてください。お願いします。