C言語 入門 小学生でもわかるC言語2

10日目 セットで一つ!構造体!

「わかりやすく!」がテーマです!

HOME/小学生でもわかるC言語2 目次/10日目 セットで一つ!構造体!/

広告

↓2016年02月29日発売↓

12歳からはじめる ゼロからのC言語 ゲームプログラミング教室

新品価格
¥2,462から
(2016/5/10 22:16時点)

もっと!C、C++言語本

目次へ戻る

?と思ったら

わからなそうな用語集

セットで一つ!構造体(こうぞうたい)!

「お名前」+「電話番号」+「住所」=「電話帳1件のデータ」

「ハンバーガー」+「ポテト」+「コーラ」=「ハンバーガーセット」

「HP」+「MP」+「職業」+「Lv」=「ゲームのキャラ一人分のデータ」

などなど。

このように世の中にはセットで考えた方が便利なものがたくさんあります。

今回はそんな時に使える構造体(こうぞうたい)について見ていきましょう!

セットを作ろう!

まずはセットを作るところから、始めましょう!

わかりやすいモノで

「名前」+「電話番号」

で電話帳を作ってみます。

struct DENWABOOK{
	char *name;
	char *tel;
};

こちらになります。まずは

「struct DENWABOOK」

ここでセットの名前を決めます!

「struct ○○」で「○○という名前のセット」という意味になります!

構造体の名前は大文字で!というのがなんとなく決まってるみたいなので、

ここは空気を読んで大文字で名前をつけます。

次に必要な内容を書きます。

char *name;
char *tel;

文章を使う時は頭に「*」アスタリスクでしたね。電話番号もケタが多いので文章として扱ってます。

ひとまず「名前→*name」と「電話番号→*tel」を内容として決めました!

ちなみに今やったのは「int」や「char」のように「struct DENWABOOK」という変数の種類をここで決めました!という事です!

構造体を使う

使う時はプログラムの先頭にさきほどの「struct ○○」を書きます。

/*プログラム34*/
#include <stdio.h>

struct DENWABOOK{
	char *name;
	char *tel;
};

int main(){
	struct DENWABOOK no1;
	struct DENWABOOK no2;

	no1.name = "鈴木一郎";
	no1.tel = "09011111111";

	no2.name = "田中二郎";
	no2.tel = "09022222222";

	printf("電話帳no1 お名前:%s 電話番号:%s\n",no1.name,no1.tel);
	printf("電話帳no2 お名前:%s 電話番号:%s\n",no2.name,no2.tel);

	return 0;
}

■実行結果■

実行結果(e-10-1)

まずは「int main()」内の最初の部分

struct DENWABOOK no1;
struct DENWABOOK no2;

こちらに注目です!

「no1」、「no2」というのが変数名です。

少しくどいですが、たとえば「int」で書いてみると

int no1;
int no2;

この「struct DENWABOOK」までが「int」と同じく変数の種類になります。

次は初期化ですね。内容を入れてみましょう!

no1.name = "鈴木一郎";
no1.tel = "09011111111";

このように「変数名.中身」のようになります。

「.」ドットを間に入れます!

そして使う時も同じように、

printf("電話帳no1 お名前:%s 電話番号:%s\n",no1.name,no1.tel);

お尻の部分で「no1.name」、「no1.tel」としております。

同じようなプログラムをもう一つ組んでみましょう!

ロールプレイングゲーム

ロールプレイングゲームのキャラクターごとのデータを考えます。

キャラクター1

名前 太郎

職業 戦士

HP 100

MP 0

Lv 30

キャラクター2

名前 花子

職業 僧侶

HP 50

MP 100

Lv 28

キャラクター3

名前 ポチ

職業 遊び人

HP 30

MP 30

Lv 10

この3人のデータをもとに、構造体を作ってみます。

struct PARTY{
	char *name;
	char *job;
	int hp;
	int mp;
	int lv;
};

「struct PARTY」という、セットを作ってみました。

それぞれ

名前→char *name;

職業→char *job;

HP→int hp;

MP→int mp;

Lv→int lv;

ではこちらをもとにプログラムを組んでみます。

/*プログラム35*/
#include <stdio.h>

struct PARTY{
	char *name;
	char *job;
	int hp;
	int mp;
	int lv;
};

int main(){
	struct PARTY tarou;
	struct PARTY hanako;
	struct PARTY pochi;

	tarou.name = "太郎";
	tarou.job = "戦士";
	tarou.hp = 100;
	tarou.mp = 0;
	tarou.lv = 30;

	hanako.name = "花子";
	hanako.job = "僧侶";
	hanako.hp = 50;
	hanako.mp = 100;
	hanako.lv = 28;

	pochi.name = "ポチ";
	pochi.job = "遊び人";
	pochi.hp = 30;
	pochi.mp = 30;
	pochi.lv = 10;

	printf("名前:%s 職業:%s HP:%d MP:%d Lv:%d\n",
		tarou.name,tarou.job,tarou.hp,tarou.mp,tarou.lv);
	printf("名前:%s 職業:%s HP:%d MP:%d Lv:%d\n",
		hanako.name,hanako.job,hanako.hp,hanako.mp,hanako.lv);
	printf("名前:%s 職業:%s HP:%d MP:%d Lv:%d\n",
		pochi.name,pochi.job,pochi.hp,pochi.mp,pochi.lv);

	return 0;
}

■実行結果■

実行結果(e-10-2)

前回のプログラムと同じく先頭部分に「struct PARTY」を書きます。

struct PARTY{
	char *name;
	char *job;
	int hp;
	int mp;
	int lv;
};

そして「int main()」の中で変数名を決めます。

struct PARTY tarou;
struct PARTY hanako;
struct PARTY pochi;

3名分ですね!

しつこいようですが、

struct PARTY;

ここまでが変数の種類です。

使い方は「変数名.中身」ですね!

tarou.name;

「.」ドットを間に入れましょう!

配列と内容のコピー

次は構造体と配列の関係を見てみましょう。

/*プログラム36*/
#include <stdio.h>

struct DENWABOOK{
	char *name;
	char *tel;
};

int main(){
	struct DENWABOOK no[2];

	no[0].name = "鈴木一郎";
	no[0].tel = "09011111111";
	
	no[1] = no[0];

	printf("電話帳no[0] お名前:%s 電話番号:%s\n",no[0].name,no[0].tel);
	printf("電話帳no[1] お名前:%s 電話番号:%s\n",no[1].name,no[1].tel);

	return 0;
}

■実行結果■

実行結果(e-10-3)

配列を使いたい時は

struct DENWABOOK no[2];

そして同じ種類の構造体(こうぞうたい)なら内容をまとめてコピーできます!

no[1] = no[0];

これらのテクニックを使えば、たくさんのデータを計算する時など便利ですね!

グローバルに使う

するどい方はもうお気づきかと思いますが、

「int main()」の中で宣言した構造体変数は普通の変数と同じく「int main()」の中でしか使えません。

いわゆるローカル変数ですね。

ではどの関数からでも使えるようにグローバルにしたい場合の方法ですが、これは結構簡単にできます。

まずは「int main()」の前、プログラム先頭に構造体を書く時に

struct PARTY{
	char *name;
	char *job;
	int hp;
	int mp;
	int lv;
}tarou,hanako,pochi;

このように続けて変数名をつける事ができます。

もう一つの方法は

struct PARTY{
	char *name;
	char *job;
	int hp;
	int mp;
	int lv;
};

struct PARTY tarou;
struct PARTY hanako;
struct PARTY pochi;

少し別にする方法もあります。

これでグローバル変数として使う事ができます。

この2つのやり方ですが、たぶん後のやり方のように

変数の種類を決める事

変数名をつける事

は別にした方が良いと思います。

内容については後で「int main()」でも他の関数の中ででも書いて大丈夫です。

次回は構造体(こうぞうたい)を別の関数から使うやり方を見ていきましょう!

次回

十一日目 構造体(こうぞうたい)と関数

□ページの先頭へ□

□目次へ戻る□

広告

↓2014年06月20日発売↓

14歳からはじめるC言語わくわくゲームプログラミング教室 Visual Studio 2013編

新品価格
¥2,500から
(2016/5/10 22:17時点)

↓2014年10月25日発売↓

超本格! サンプルで覚えるC言語 3Dゲームプログラミング教室

新品価格
¥3,110から
(2016/5/10 22:18時点)

↓2013年07月25日発売↓

小学生からはじめるわくわくプログラミング

新品価格
¥2,052から
(2016/5/10 22:21時点)

↓2016年05月13日発売↓

小学生からはじめるわくわくプログラミング2

新品価格
¥2,052から
(2016/5/10 22:22時点)

もっと!C、C++言語本