質問編集履歴

3

見にくかったため

2021/07/04 09:31

投稿

tamintya
tamintya

スコア34

test CHANGED
File without changes
test CHANGED
@@ -518,7 +518,7 @@
518
518
 
519
519
 
520
520
 
521
- mallocの
521
+ ###記2
522
522
 
523
523
  ```
524
524
 

2

追加のコードの記入

2021/07/04 09:31

投稿

tamintya
tamintya

スコア34

test CHANGED
File without changes
test CHANGED
@@ -515,3 +515,195 @@
515
515
 
516
516
 
517
517
  ```
518
+
519
+
520
+
521
+ mallocの追加
522
+
523
+ ```
524
+
525
+ #include<stdio.h>
526
+
527
+ #include<string.h>
528
+
529
+ #include<stdlib.h>
530
+
531
+
532
+
533
+ typedef struct DIC_CELL{
534
+
535
+ char *english;
536
+
537
+ char *mean;
538
+
539
+ }DIC_CELL;
540
+
541
+
542
+
543
+ char *search(DIC_CELL *p , int min, int max, char *name){
544
+
545
+ int middle;
546
+
547
+ char *not = "NOT";
548
+
549
+ while(min <= max){
550
+
551
+ middle = (min + max) / 2;
552
+
553
+ //確認
554
+
555
+ printf("min = %d , max = %d , middle = %d\n" , min,max,middle);
556
+
557
+
558
+
559
+ if(strcmp(p[middle].english,name) == 0){
560
+
561
+ return p[middle].mean;
562
+
563
+ }
564
+
565
+ else if(strcmp(p[middle].english,name) < 0){
566
+
567
+ min = middle + 1;
568
+
569
+ }
570
+
571
+ else{
572
+
573
+ max = middle -1;
574
+
575
+ }
576
+
577
+ }
578
+
579
+
580
+
581
+
582
+
583
+ return not;
584
+
585
+
586
+
587
+ }
588
+
589
+
590
+
591
+ int main(int argc , char *argv[]){
592
+
593
+ char name[100];
594
+
595
+ char *mean;
596
+
597
+ char dat[100],zat[100];
598
+
599
+ DIC_CELL p[50];
600
+
601
+ int i=0;
602
+
603
+ FILE *fp;
604
+
605
+ char end[3];
606
+
607
+
608
+
609
+ // プログラム利用方法表示
610
+
611
+ if ( argc != 2 ) {
612
+
613
+ fprintf( stderr, "Usage: %s filename\n", argv[0] );
614
+
615
+ exit( 1 );
616
+
617
+ }
618
+
619
+
620
+
621
+ //ファイルオープン
622
+
623
+ if (( fp = fopen( argv[1], "r" ) ) == NULL ) {
624
+
625
+ fprintf( stderr, "File open error %s\n", argv[1] );
626
+
627
+ exit( 1 );
628
+
629
+ }
630
+
631
+
632
+
633
+ for(i=0;i<50;i++){
634
+
635
+ p[i].english = (char*)malloc(sizeof(char));
636
+
637
+ p[i].mean = (char*)malloc(sizeof(char));
638
+
639
+ }
640
+
641
+
642
+
643
+ // データ読み込み&作成
644
+
645
+ while( fscanf( fp, "%s %s", dat,zat) != EOF ) {
646
+
647
+ strcpy(p[i].english, dat);
648
+
649
+ strcpy(p[i].mean, zat);
650
+
651
+ i++;
652
+
653
+ }
654
+
655
+
656
+
657
+ while(1){
658
+
659
+ printf("英単語を入力して下さい --->");
660
+
661
+ scanf("%s" , name);
662
+
663
+
664
+
665
+ //検索
666
+
667
+ mean = search(p , 0 , 49 , name);
668
+
669
+
670
+
671
+ //表示
672
+
673
+ if(strcmp(mean,"NOT") == 0){
674
+
675
+ printf("%sの意味 : 辞書に登録されていません\n" , name);
676
+
677
+ }
678
+
679
+ else{
680
+
681
+ printf("%sの意味 : %s\n" , name,mean);
682
+
683
+ }
684
+
685
+
686
+
687
+ //継続の確認
688
+
689
+ printf("続けますか? (yes/no) --->");
690
+
691
+ scanf("%s" , end);
692
+
693
+ if(strcmp(end,"no") == 0) break;
694
+
695
+ }
696
+
697
+ printf("プログラムを終了します.\n");
698
+
699
+
700
+
701
+ fclose(fp);
702
+
703
+ return 0;
704
+
705
+ }
706
+
707
+
708
+
709
+ ```

1

追加のコードの記入

2021/07/04 08:10

投稿

tamintya
tamintya

スコア34

test CHANGED
File without changes
test CHANGED
@@ -333,3 +333,185 @@
333
333
 
334
334
 
335
335
  gdbコマンドによる値の確認
336
+
337
+
338
+
339
+ ###追記
340
+
341
+ ```
342
+
343
+ #include<stdio.h>
344
+
345
+ #include<string.h>
346
+
347
+ #include<stdlib.h>
348
+
349
+
350
+
351
+ typedef struct DIC_CELL{
352
+
353
+ char *english;
354
+
355
+ char *mean;
356
+
357
+ }DIC_CELL;
358
+
359
+
360
+
361
+ char *search(DIC_CELL *p , int min, int max, char *name){
362
+
363
+ int middle;
364
+
365
+ char *not = "NOT";
366
+
367
+ while(min <= max){
368
+
369
+ middle = (min + max) / 2;
370
+
371
+ //確認
372
+
373
+ printf("min = %d , max = %d , middle = %d\n" , min,max,middle);
374
+
375
+
376
+
377
+ if(strcmp(p[middle].english,name) == 0){
378
+
379
+ return p[middle].mean;
380
+
381
+ }
382
+
383
+ else if(strcmp(p[middle].english,name) < 0){
384
+
385
+ min = middle + 1;
386
+
387
+ }
388
+
389
+ else{
390
+
391
+ max = middle -1;
392
+
393
+ }
394
+
395
+ }
396
+
397
+
398
+
399
+
400
+
401
+ return not;
402
+
403
+
404
+
405
+ }
406
+
407
+
408
+
409
+ int main(int argc , char *argv[]){
410
+
411
+ char name[100];
412
+
413
+ char *mean;
414
+
415
+ char dat[100],zat[100];
416
+
417
+ DIC_CELL p[50];
418
+
419
+ int i=0;
420
+
421
+ FILE *fp;
422
+
423
+ char end[3];
424
+
425
+
426
+
427
+ // プログラム利用方法表示
428
+
429
+ if ( argc != 2 ) {
430
+
431
+ fprintf( stderr, "Usage: %s filename\n", argv[0] );
432
+
433
+ exit( 1 );
434
+
435
+ }
436
+
437
+
438
+
439
+ //ファイルオープン
440
+
441
+ if (( fp = fopen( argv[1], "r" ) ) == NULL ) {
442
+
443
+ fprintf( stderr, "File open error %s\n", argv[1] );
444
+
445
+ exit( 1 );
446
+
447
+ }
448
+
449
+
450
+
451
+ // データ読み込み&作成
452
+
453
+ while( fscanf( fp, "%s %s", dat,zat) != EOF ) {
454
+
455
+ strcpy(p[i].english, dat);
456
+
457
+ strcpy(p[i].mean, zat);
458
+
459
+ i++;
460
+
461
+ }
462
+
463
+
464
+
465
+ while(1){
466
+
467
+ printf("英単語を入力して下さい --->");
468
+
469
+ scanf("%s" , name);
470
+
471
+
472
+
473
+ //検索
474
+
475
+ mean = search(p , 0 , 49 , name);
476
+
477
+
478
+
479
+ //表示
480
+
481
+ if(strcmp(mean,"NOT") == 0){
482
+
483
+ printf("%sの意味 : 辞書に登録されていません\n" , name);
484
+
485
+ }
486
+
487
+ else{
488
+
489
+ printf("%sの意味 : %s\n" , name,mean);
490
+
491
+ }
492
+
493
+
494
+
495
+ //継続の確認
496
+
497
+ printf("続けますか? (yes/no) --->");
498
+
499
+ scanf("%s" , end);
500
+
501
+ if(strcmp(end,"no") == 0) break;
502
+
503
+ }
504
+
505
+ printf("プログラムを終了します.\n");
506
+
507
+
508
+
509
+ fclose(fp);
510
+
511
+ return 0;
512
+
513
+ }
514
+
515
+
516
+
517
+ ```