第11章 C言語の構造体 ~関連のある変数をまとめる~
そろそろ本格的なプログラムを作って見たいところだと思います。
本格的な、プログラムを作るためには、あともう一つ知っていて欲しいC言語の文法があります。
それが、構造体です。
今、書籍を管理するプログラムを作るとします。
変数には、必要最低限の情報として、書籍名、出版社名、価格の三つを用意しましょう。
とりあえず、次のようなプログラムを作ってみてください。
-- リスト26 --
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 256
void main() {
char name[MAX_LENGTH]; /* 書籍名 */
char publisher[MAX_LENGTH]; /* 出版社名 */
int price; /* 価格 */
/* データの入力 */
strcpy(name, "憂鬱なプログラマのためのオブジェクト指向開発講座");
strcpy(publisher, "翔泳社");
price = 3500;
/* データの表示 */
printf("書籍名=%s\n", name);
printf("出版社名=%s\n", publisher);
printf("価格=%d円\n", price);
}
一冊分の書籍情報を管理できるプログラムができたことだと思います。
しかし、これではたいした役に立ちませんね。
もう少し高度に、複数の書籍情報を管理できるプログラムにしましょう。
ついでに、利用者が自由に入力できるようにしてみましょう。
リスト26を次のように変更してください。
-- リスト26` --
#include <stdio.h>
#include <stdlib.h>
#define BOOK_COUNT 5
#define MAX_LENGTH 256
void main() {
char name[BOOK_COUNT][MAX_LENGTH]; /* 書籍名 */
char publisher[BOOK_COUNT][MAX_LENGTH]; /* 出版社名 */
int price[BOOK_COUNT]; /* 価格 */
char buf[MAX_LENGTH]; /* 価格の一時保存領域 */
int cnt; /* ループカウンター */
/* データの入力 */
for (cnt = 0; cnt < BOOK_COUNT; cnt++) {
printf("%d冊目\n", cnt+1);
printf("書籍名を入力してください->");
gets(name[cnt]);
printf("出版社名を入力してください->");
gets(publisher[cnt]);
printf("価格を入力してください->");
gets(buf);
price[cnt] = atoi(buf);
}
/* データの表示 */
for (cnt = 0; cnt < BOOK_COUNT; cnt++) {
printf("%d冊目\n", cnt+1);
printf("書籍名=%s\n", name[cnt]);
printf("出版社名=%s\n", publisher[cnt]);
printf("価格=%d円\n", price[cnt]);
}
}
どうですか?
そろそろ、この程度のプログラムだったら、説明がなくても理解できるようになってきましたか?
しかし、変数宣言のあたりが、何だかごちゃごちゃとしてきましたね。
5つの変数の中でも、name や、publisher、price の三つは、お互いに関連の深い変数です。
ここは何とかして、この三つの変数をひとまとまりにしたいものです。