###前提・実現したいこと
アルファベット順に表示したいです
どうやったらアルファベット順に表示できますか?
もし,このままでいいならオーバーフローを直して欲しいです...
アルファベット順に表示させる機能を実装中に以下のエラーメッセージが発生しました。
###発生している問題・エラーメッセージ
エラーメッセージ Abort trap: 6
###該当のソースコード
c言語 ここにご自身が実行したソースコードを書いてください #include<stdio.h> #include<string.h> #include<stdlib.h> struct data{ char name[256]; char mail[256]; int group; int ID; struct data *next; }; void alphabet_output(struct data *p1); struct data* new_data(struct data* list); void list_output(struct data* p); int main(void){ struct data *list = NULL; int i=1; while(i){ list = new_data(list); scanf("%d",&i); } alphabet_output(list); //list_output(list); } void alphabet_output(struct data *p1){ //アルファベット順に表示// struct data *p2; //交換するために使う// struct data *p3; //それぞれの比較でアルファベット順で一番早い人を格納しておく struct data *p4; //一番初めを格納 struct data *p5; //比較する対象 p2=(struct data*)malloc(sizeof(struct data)); p3=(struct data*)malloc(sizeof(struct data)); p5=(struct data*)malloc(sizeof(struct data)); if(p1->next==NULL){ printf("%s %s %d %d\n",p1->name,p1->mail,p1->group,p1->ID); } else{ p4=p1; while(p1->next!=NULL){ p3=p1; p5=p1; while(1){ if(p5->next==NULL){ break; } if(strcmp(p3->name,p5->name)==0){ } else if(strcmp(p3->name,p5->name)>0){ p3=p5; } else if(strcmp(p3->name,p5->name)<0){ } p5 = p5->next; } strcpy(p2->name,p1->name); strcpy(p2->mail,p1->mail); p2->group=p1->group; p2->ID=p1->ID; strcpy(p1->name,p3->name); strcpy(p1->mail,p3->mail); p1->group=p3->group; p1->ID=p3->ID; strcpy(p3->name,p2->name); strcpy(p3->mail,p2->mail); p3->group=p2->group; p3->ID=p2->ID; p5=p1->next; p1=p1->next; } p1=p4; while(p1->next!=NULL){ printf("%s %s %d %d\n",p1->name,p1->mail,p1->group,p1->ID); p1=p1->next; } printf("%s %s %d %d\n",p1->name,p1->mail,p1->group,p1->ID); } } struct data* new_data(struct data* list){ char check[256]; int a,b=0; struct data* node = (struct data*)malloc(sizeof(struct data)); printf("データを入力してください。\n"); printf("name:"); scanf("%s",node->name); printf("mail:"); scanf("%s",node->mail); while(b!=1){ printf("group:"); scanf("%s",check); a=0; b=1; while(check[a]!='\0'&& check[a] != '\n'){ if(check[a]<'0' || '9'<check[a]){ b=0; printf("数字を入力してください。\n");break; } a++; } node->group = atoi(check); } node->next = NULL; if(list == NULL){ node->ID = 1; return node;//空なら、ここに入る } else{ struct data* p = list; int n = 2; p->ID = 1; while (p->next != NULL) {//最後までいく p->next->ID = n; n++; p = p->next; } node->ID = n; p->next = node; //最後のとこにれんけつする \ return list; } } void list_output(struct data *p){ int total=0; while(p!=NULL){ printf("%s %s %d %d\n",p->name,p->mail,p->group,p->ID); total++; if(p->next == NULL) break; p=p->next; } printf("登録者数は%dです\n",total); }
###試したこと
ネットで確認するとオーバーフローとはわかったのですがその後どうソースコードを直せばいいのかわからなかったです.
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。