teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

見にくかったため

2021/07/04 09:31

投稿

tamintya
tamintya

スコア34

title CHANGED
File without changes
body CHANGED
@@ -258,7 +258,7 @@
258
258
 
259
259
  ```
260
260
 
261
- mallocの
261
+ ###記2
262
262
  ```
263
263
  #include<stdio.h>
264
264
  #include<string.h>

2

追加のコードの記入

2021/07/04 09:31

投稿

tamintya
tamintya

スコア34

title CHANGED
File without changes
body CHANGED
@@ -256,4 +256,100 @@
256
256
  return 0;
257
257
  }
258
258
 
259
+ ```
260
+
261
+ mallocの追加
262
+ ```
263
+ #include<stdio.h>
264
+ #include<string.h>
265
+ #include<stdlib.h>
266
+
267
+ typedef struct DIC_CELL{
268
+ char *english;
269
+ char *mean;
270
+ }DIC_CELL;
271
+
272
+ char *search(DIC_CELL *p , int min, int max, char *name){
273
+ int middle;
274
+ char *not = "NOT";
275
+ while(min <= max){
276
+ middle = (min + max) / 2;
277
+ //確認
278
+ printf("min = %d , max = %d , middle = %d\n" , min,max,middle);
279
+
280
+ if(strcmp(p[middle].english,name) == 0){
281
+ return p[middle].mean;
282
+ }
283
+ else if(strcmp(p[middle].english,name) < 0){
284
+ min = middle + 1;
285
+ }
286
+ else{
287
+ max = middle -1;
288
+ }
289
+ }
290
+
291
+
292
+ return not;
293
+
294
+ }
295
+
296
+ int main(int argc , char *argv[]){
297
+ char name[100];
298
+ char *mean;
299
+ char dat[100],zat[100];
300
+ DIC_CELL p[50];
301
+ int i=0;
302
+ FILE *fp;
303
+ char end[3];
304
+
305
+ // プログラム利用方法表示
306
+ if ( argc != 2 ) {
307
+ fprintf( stderr, "Usage: %s filename\n", argv[0] );
308
+ exit( 1 );
309
+ }
310
+
311
+ //ファイルオープン
312
+ if (( fp = fopen( argv[1], "r" ) ) == NULL ) {
313
+ fprintf( stderr, "File open error %s\n", argv[1] );
314
+ exit( 1 );
315
+ }
316
+
317
+ for(i=0;i<50;i++){
318
+ p[i].english = (char*)malloc(sizeof(char));
319
+ p[i].mean = (char*)malloc(sizeof(char));
320
+ }
321
+
322
+ // データ読み込み&作成
323
+ while( fscanf( fp, "%s %s", dat,zat) != EOF ) {
324
+ strcpy(p[i].english, dat);
325
+ strcpy(p[i].mean, zat);
326
+ i++;
327
+ }
328
+
329
+ while(1){
330
+ printf("英単語を入力して下さい --->");
331
+ scanf("%s" , name);
332
+
333
+ //検索
334
+ mean = search(p , 0 , 49 , name);
335
+
336
+ //表示
337
+ if(strcmp(mean,"NOT") == 0){
338
+ printf("%sの意味 : 辞書に登録されていません\n" , name);
339
+ }
340
+ else{
341
+ printf("%sの意味 : %s\n" , name,mean);
342
+ }
343
+
344
+ //継続の確認
345
+ printf("続けますか? (yes/no) --->");
346
+ scanf("%s" , end);
347
+ if(strcmp(end,"no") == 0) break;
348
+ }
349
+ printf("プログラムを終了します.\n");
350
+
351
+ fclose(fp);
352
+ return 0;
353
+ }
354
+
259
355
  ```

1

追加のコードの記入

2021/07/04 08:10

投稿

tamintya
tamintya

スコア34

title CHANGED
File without changes
body CHANGED
@@ -165,4 +165,95 @@
165
165
 
166
166
  ### 試したこと
167
167
 
168
- gdbコマンドによる値の確認
168
+ gdbコマンドによる値の確認
169
+
170
+ ###追記
171
+ ```
172
+ #include<stdio.h>
173
+ #include<string.h>
174
+ #include<stdlib.h>
175
+
176
+ typedef struct DIC_CELL{
177
+ char *english;
178
+ char *mean;
179
+ }DIC_CELL;
180
+
181
+ char *search(DIC_CELL *p , int min, int max, char *name){
182
+ int middle;
183
+ char *not = "NOT";
184
+ while(min <= max){
185
+ middle = (min + max) / 2;
186
+ //確認
187
+ printf("min = %d , max = %d , middle = %d\n" , min,max,middle);
188
+
189
+ if(strcmp(p[middle].english,name) == 0){
190
+ return p[middle].mean;
191
+ }
192
+ else if(strcmp(p[middle].english,name) < 0){
193
+ min = middle + 1;
194
+ }
195
+ else{
196
+ max = middle -1;
197
+ }
198
+ }
199
+
200
+
201
+ return not;
202
+
203
+ }
204
+
205
+ int main(int argc , char *argv[]){
206
+ char name[100];
207
+ char *mean;
208
+ char dat[100],zat[100];
209
+ DIC_CELL p[50];
210
+ int i=0;
211
+ FILE *fp;
212
+ char end[3];
213
+
214
+ // プログラム利用方法表示
215
+ if ( argc != 2 ) {
216
+ fprintf( stderr, "Usage: %s filename\n", argv[0] );
217
+ exit( 1 );
218
+ }
219
+
220
+ //ファイルオープン
221
+ if (( fp = fopen( argv[1], "r" ) ) == NULL ) {
222
+ fprintf( stderr, "File open error %s\n", argv[1] );
223
+ exit( 1 );
224
+ }
225
+
226
+ // データ読み込み&作成
227
+ while( fscanf( fp, "%s %s", dat,zat) != EOF ) {
228
+ strcpy(p[i].english, dat);
229
+ strcpy(p[i].mean, zat);
230
+ i++;
231
+ }
232
+
233
+ while(1){
234
+ printf("英単語を入力して下さい --->");
235
+ scanf("%s" , name);
236
+
237
+ //検索
238
+ mean = search(p , 0 , 49 , name);
239
+
240
+ //表示
241
+ if(strcmp(mean,"NOT") == 0){
242
+ printf("%sの意味 : 辞書に登録されていません\n" , name);
243
+ }
244
+ else{
245
+ printf("%sの意味 : %s\n" , name,mean);
246
+ }
247
+
248
+ //継続の確認
249
+ printf("続けますか? (yes/no) --->");
250
+ scanf("%s" , end);
251
+ if(strcmp(end,"no") == 0) break;
252
+ }
253
+ printf("プログラムを終了します.\n");
254
+
255
+ fclose(fp);
256
+ return 0;
257
+ }
258
+
259
+ ```