第5章 演習問題1 ~2次元配列を使う~

~~~~~~ 回答例 ~~~~~~

#include <stdio.h>
#include <string.h>

#define PERSON_COUNT  21    /* 新人の人数  */
#define MAX_LENGTH   256   /* 最大文字列長 */
        (1)

void main()
{
  char shinjinName[PERSON_COUNT][MAX_LENGTH + 1];
  int  cnt;
  int  len;

  /**
   * 新人の人数分ループして、名前を入力してもらう
   * ただし、空リターンはエラーとして扱う
   */
  for (cnt = 0; cnt < PERSON_COUNT; cnt++) {
    printf( "%d人目の名前を入力して下さい。\n", cnt+1 );

    gets( shinjinName[cnt] );

    len = strlen( shinjinName[cnt] );
                  (2)

    if (len == 0) {
      printf( "空リターンはエラーとして、途中終了です。\n" );
      break;
    }
  }

  /**
   * 新人の名前一覧を表示する
   */
  printf("―――― 新人名前一覧 ――――\n");
  for (cnt = 0; cnt < PERSON_COUNT; cnt++) {
    printf( "%d人目:%s\n", cnt+1, shinjinName[cnt] );
  }
}

 まず、(1)の部分を説明します。いきなり、見たことのない記述が出てきましたね。 これは、それほど難しいことではありません。 全てのPERSON_COUNTという記述を、21という記述に置き換えろという命令になります (注17) 。

  char shinjinName[PERSON_COUNT][MAX_LENGTH + 1]; の記述は、
  char shinjinName[21][257]; と全く同じことになります。

 わざわざ、#defineなんてものを使う理由の一つは、プログラムを見やすくするためです。 ただの数字の21よりも、人間にわかりやすい名前の付いている方が、親切なプログラムと言えましょう。

 もう一つの理由は、PERSON_COUNTを21から22に変更したくなった時に、 1カ所を直すだけで良いために、あとあと便利になります。

< 前のページへ
お問い合わせ
  • ようかん
  • SG Labs(エスジー ラボ)
  • ITERACY
  • RiceLog(ライスログ)
  • Salesforce導入コンサルティング
  • SES営業向け用語講座

Pagetop