第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カ所を直すだけで良いために、あとあと便利になります。
< 前のページへ 次のページへ >-
IS 559680 / ISO27001
認証範囲 本社、芝大門オフィス情報セキュリティ基本方針 -
個人情報保護方針
個人情報の取扱いについて
保有個人データ又は
第三者提供記録に関する
事項の周知について
特定個人情報の取扱いについて -
FS 671851 / ISO9001
認証範囲 本社、芝大門オフィス品質方針