あと少しの所なので教えてください><
C言語で名前と成績を並べるプログラムを書いてみたのですがコンパイラは通るもののうまくいきません><教えて下さい><長いですがそんなに難しくないのでお願いします><
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student{
char name[20];
int eng;
int math;
struct student *next;
}lst;
lst *root=NULL;
void attach(char *n,int e,int m)
{
lst *newp,*p;
newp=(lst *)malloc(sizeof(lst));
if(newp==NULL){
fprintf(stderr,"エラーです\n");
exit(1);
}
strncpy(newp -> name,n,20);
newp -> eng =e;
newp -> math=m;
newp -> next=NULL;
if(root==NULL){
root=newp;
} else{
for(p=root;(p ->next)!=NULL;p=p -> next);
p -> next=newp;
}
}
void delete(char *n)
{
lst *p,*tmp;
if(root!=NULL){
if(strncmp(root ->name,n,20)==0){
tmp=root -> next;
free(root);
root=tmp;
} else {
for(p=root;(p -> next)!=NULL;p= p -> next){
if(strncmp(p->next->name,n,20)==0){
tmp= p->next->next;
free(p -> next);
p -> next = tmp;
break;
}
}
}
}
}
void printlst()
{
lst *p;
if(root==NULL){
printf("リストは空です\n");
} else {
p=root;
do {
printf("名前: %s\n",p->name);
printf("英語: %d\n",p->eng);
printf("数学: %d\n",p->math);
printf("\n");
p=p->next;
}while(p!=NULL);
}
}
void insert(char *n,int e,int m)
{
lst *newp,*p;
newp=(lst *)malloc(sizeof(lst));
if(newp==NULL){
fprintf(stderr,"エラー:メモリーの確保に失敗しました。\n");
exit(1);
}
strncpy(newp->name,n,20);
newp->eng=e;
newp->math=m;
newp->next=NULL;
if(strcmp(n,root->name)<=0){
newp->next=root;
root=newp;
} else { //ここです。
p=newp->next->next;
newp->next->next=newp->next;
newp=p;
}
}
int main()
{
root=NULL;
attach("alice",80,73);
attach("bob",90,80);
attach("carol",72,95);
attach("dave",82,65);
attach("charlie",0,0);
delete("bob");
delete("alice");
printlst();
insert("charlie",0,0);
} という感じなんですがvoid insertのところで先頭のcarolを入れると大丈夫なんですが2番目以降に入るはずのdaveやcharlieを入れるとBus errorとでてしまうので2番目以降に入れるためのプログラム void insertの//ココです。の所の書き方が間違っているんだと思います。どなたか教えてください><お願いします。
補足
void attachがメンバを書き込むもの。
delateが消去。
void insertが辞書順にするもので、たぶん問題はここの最後です。お願いします><
お礼
ダメでした~ToT 作り直そうとしたら既にあります!って出てしまいました^^; どうしよう・・・