### 正しく値が表示されるようにしたい
c言語で正の整数を入力し小さい順に並べるというリスト構造を再帰を用いて作りたいのですが以下の問題が発生してしまいます。
10行目の (*q)->data = a; がうまく作動していないのことがわかったのですがうまく行きません。
原因と解決法を教えてほしいです。
発生している問題・エラーメッセージ
正の値の入力しても何も表示されない。 負の値を入力するとセグメンテーションエラーが発生する。 (例) 0以上のデータを入力して下さい(負の値で終了) -->4 0以上のデータを入力して下さい(負の値で終了) -->-1 セグメンテーション違反です
該当のソースコード
c
1#include<stdio.h> 2#include<stdlib.h> 3 4struct cell{ 5 double data; 6 struct cell *next; 7}; 8 9void add_list(struct cell **q, double a){ 10 if((*q)->next == NULL){ 11 (*q)->data = a; 12 } 13 if((*q)->data < a){ 14 add_list(&(*q)->next,a); 15 } 16 else{ 17 (*q)->data = a; 18 } 19} 20 21void show_list(struct cell **q ){ 22 if((*q)->next == NULL){ 23 printf("\n"); 24 } 25 else{ 26 printf("-> %lf" , (*q)->data); 27 show_list(&(*q)->next); 28 } 29} 30 31void free_list(struct cell *q ){ 32 if(q->next != NULL){ 33 free_list(q->next); 34 } 35 free(q); 36} 37 38 39int main(void){ 40 double data; 41 struct cell *p; 42 (*p).next = NULL; 43 44 while(1){ 45 printf("0以上のデータを入力して下さい(負の値で終了) -->"); 46 scanf("%lf" , &data); 47 if(data < 0){ 48 free_list(p); 49 } 50 else{ 51 add_list(&p,data); 52 show_list(&p); 53 } 54 55 } 56 57 return 0; 58} 59
試したこと
gdbコマンドによる値の確認
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/05 01:18
2021/06/05 01:24