回答編集履歴

2

コードの修正

2021/06/05 16:13

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -78,7 +78,7 @@
78
78
 
79
79
  else {
80
80
 
81
- printf(" -> %.15g", p->data);
81
+ printf(" -> %g", p->data);
82
82
 
83
83
  show_list(p->next);
84
84
 
@@ -88,15 +88,15 @@
88
88
 
89
89
 
90
90
 
91
- void free_list(struct cell *q)
91
+ void free_list(struct cell *p)
92
92
 
93
93
  {
94
94
 
95
- if (q->next != NULL)
95
+ if (p == NULL) return;
96
96
 
97
- free_list(q->next);
97
+ free_list(p->next);
98
98
 
99
- free(q);
99
+ free(p);
100
100
 
101
101
  }
102
102
 
@@ -116,21 +116,15 @@
116
116
 
117
117
  printf("0以上のデータを入力して下さい(負の値で終了) -->");
118
118
 
119
- if (scanf("%lf", &data) != 1 || data < 0) {
119
+ if (scanf("%lf", &data) != 1 || data < 0) break;
120
120
 
121
- free_list(p);
121
+ add_list(&p, data);
122
122
 
123
- break;
124
-
125
- } else {
126
-
127
- add_list(&p, data);
128
-
129
- show_list(p);
123
+ show_list(p);
130
-
131
- }
132
124
 
133
125
  }
126
+
127
+ free_list(p);
134
128
 
135
129
  return 0;
136
130
 

1

コードを追加

2021/06/05 16:13

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -11,3 +11,131 @@
11
11
 
12
12
 
13
13
  あと、malloc で領域を確保していないのに free をするのも変です。
14
+
15
+
16
+
17
+ **追記**
18
+
19
+ 現在のコードはどうなっているのですか?
20
+
21
+ 質問に追記してください。
22
+
23
+ malloc は使っていますか?
24
+
25
+
26
+
27
+ また、次のコードを参考にして、あなたのコードに活用できませんか?
28
+
29
+ ```C
30
+
31
+ #include <stdio.h> // scanf, printf
32
+
33
+ #include <stdlib.h> // malloc, free
34
+
35
+
36
+
37
+ struct cell {
38
+
39
+ double data;
40
+
41
+ struct cell *next;
42
+
43
+ };
44
+
45
+
46
+
47
+ void add_list(struct cell **q, double a)
48
+
49
+ {
50
+
51
+ if (*q != NULL && (*q)->data < a)
52
+
53
+ add_list(&(*q)->next, a);
54
+
55
+ else {
56
+
57
+ struct cell *p = malloc(sizeof(struct cell));
58
+
59
+ p->data = a;
60
+
61
+ p->next = *q;
62
+
63
+ *q = p;
64
+
65
+ }
66
+
67
+ }
68
+
69
+
70
+
71
+ void show_list(struct cell *p)
72
+
73
+ {
74
+
75
+ if (p == NULL)
76
+
77
+ printf("\n");
78
+
79
+ else {
80
+
81
+ printf(" -> %.15g", p->data);
82
+
83
+ show_list(p->next);
84
+
85
+ }
86
+
87
+ }
88
+
89
+
90
+
91
+ void free_list(struct cell *q)
92
+
93
+ {
94
+
95
+ if (q->next != NULL)
96
+
97
+ free_list(q->next);
98
+
99
+ free(q);
100
+
101
+ }
102
+
103
+
104
+
105
+ int main(void)
106
+
107
+ {
108
+
109
+ double data;
110
+
111
+ struct cell *p = NULL;
112
+
113
+
114
+
115
+ while (1) {
116
+
117
+ printf("0以上のデータを入力して下さい(負の値で終了) -->");
118
+
119
+ if (scanf("%lf", &data) != 1 || data < 0) {
120
+
121
+ free_list(p);
122
+
123
+ break;
124
+
125
+ } else {
126
+
127
+ add_list(&p, data);
128
+
129
+ show_list(p);
130
+
131
+ }
132
+
133
+ }
134
+
135
+ return 0;
136
+
137
+ }
138
+
139
+ ```
140
+
141
+ このコードで分からないところはどこですか?