あと少しの所なので教えてください><
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が辞書順にするもので、たぶん問題はここの最後です。お願いします><
お礼
しばらくネットから遠のいていましてお礼が遅くなり失礼しました。 Yahooの方は問題なく載せても良いようですので利用させていただく事にしました。 ありがとうございました。
補足
>goo、YAHOO、様に確認 やはりこれしかないですかね。 あなたのサイトにgooの機能を、 ※ 営利目的でお使いいただくことはご遠慮ください ※ http://help.goo.ne.jp/help/article/699/ 会社の道案内に使うことで、(会社の本質は営利目的ですから) 何処からが営利なのか具体的に記されていないのは、個別に問い合わせるしかないようですね。 ありがとうございました。 結果は後日報告させていただきます、締め切りはその時にさせていただきます。