回答編集履歴

1

コードと実行結果を追加

2021/06/15 10:39

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -35,3 +35,183 @@
35
35
  これが理解できますか?
36
36
 
37
37
  動いたから解決ではなく、質問のコードがなぜダメか理解してください。
38
+
39
+
40
+
41
+ **追記**
42
+
43
+ 質問のコードの member_tree を私のコードに置き換えたものです。
44
+
45
+ ```C
46
+
47
+ #include<stdio.h>
48
+
49
+ #include<stdlib.h>
50
+
51
+ #include<string.h>
52
+
53
+
54
+
55
+ struct node{
56
+
57
+ char animal[20];
58
+
59
+ struct node *left;
60
+
61
+ struct node *right;
62
+
63
+ };
64
+
65
+ typedef struct node node;
66
+
67
+
68
+
69
+ int member_tree(char *namae, struct node *p)
70
+
71
+ {
72
+
73
+ if (p == NULL) return 0;
74
+
75
+ int diff = strcmp(namae, p->animal);
76
+
77
+ if (diff > 0) return member_tree(namae, p->right);
78
+
79
+ if (diff < 0) return member_tree(namae, p->left);
80
+
81
+ return 1;
82
+
83
+ }
84
+
85
+
86
+
87
+ int main(void){
88
+
89
+ char name[20];
90
+
91
+ char *p;
92
+
93
+ node *root;
94
+
95
+ node *elephant,*cat,*dog,*rat,*hourse,*bat,*hamster;
96
+
97
+ char animals[][20] = {"elephant","cat","dog","rat","horse","bat","hamster"};
98
+
99
+ root = (node*)malloc(sizeof(node));
100
+
101
+ elephant = (node*)malloc(sizeof(node));
102
+
103
+ cat = (node*)malloc(sizeof(node));
104
+
105
+ dog = (node*)malloc(sizeof(node));
106
+
107
+ rat = (node*)malloc(sizeof(node));
108
+
109
+ hourse = (node*)malloc(sizeof(node));
110
+
111
+ bat = (node*)malloc(sizeof(node));
112
+
113
+ hamster = (node*)malloc(sizeof(node));
114
+
115
+ strcpy(elephant->animal,animals[0]);
116
+
117
+ strcpy(cat->animal,animals[1]);
118
+
119
+ strcpy(dog->animal,animals[2]);
120
+
121
+ strcpy(rat->animal,animals[3]);
122
+
123
+ strcpy(hourse->animal,animals[4]);
124
+
125
+ strcpy(bat->animal,animals[5]);
126
+
127
+ strcpy(hamster->animal,animals[6]);
128
+
129
+
130
+
131
+ root = elephant;
132
+
133
+ root->left = cat;
134
+
135
+ root->left->left = bat;
136
+
137
+ root->left->right = dog;
138
+
139
+ root->right = rat;
140
+
141
+ root->right->left = hourse;
142
+
143
+ root->right->left->left = hamster;
144
+
145
+
146
+
147
+ while(1){
148
+
149
+ printf("動物名を英語で入力してください(00で終了)-->");
150
+
151
+ scanf("%s" , name);
152
+
153
+ // p = (node*)malloc(sizeof(node));
154
+
155
+ // strcpy(*p,name);
156
+
157
+ p = &(name[0]);
158
+
159
+ if(strcmp(name,"00") == 0){
160
+
161
+ printf("終了します\n");
162
+
163
+ break;
164
+
165
+ }
166
+
167
+ else{
168
+
169
+ if(member_tree(p,root) == 0){
170
+
171
+ printf("%sは存在しません.\n" , name);
172
+
173
+ }
174
+
175
+ else{
176
+
177
+ printf("%sは存在します.\n" , name);
178
+
179
+ }
180
+
181
+ }
182
+
183
+ }
184
+
185
+
186
+
187
+ return 0;
188
+
189
+ }
190
+
191
+ ```
192
+
193
+ 実行結果
194
+
195
+ ```text
196
+
197
+ 動物名を英語で入力してください(00で終了)-->dog
198
+
199
+ dogは存在します.
200
+
201
+ 動物名を英語で入力してください(00で終了)-->cat
202
+
203
+ catは存在します.
204
+
205
+ 動物名を英語で入力してください(00で終了)-->egg
206
+
207
+ eggは存在しません.
208
+
209
+ 動物名を英語で入力してください(00で終了)-->00
210
+
211
+ 終了します
212
+
213
+ ```
214
+
215
+ セグメンテーション違反になりません。
216
+
217
+ セグメンテーション違反になるというコードと入力データを質問に追記してください。