構造体の基本

構造体の基本

プログラムを組んでいると、データをまとめて扱いたい場合があります。

例えば、本の情報をまとめる際に

著者名、タイトル、価格

を一つの変数としてしまった方がいいという場合があります。

そこで、登場するのが構造体という概念です。

構造体を使うことで、様々な変数を一つにまとめることができます。

構造体がないと

先ほどあげた本の例を構造体なしでコードすると、変数を

char name[50];
char title[50];
int price;

と定義する必要があります。

本がひとつだけならいいのですが、数が増えると変数の定義だけでたいへんです。

例えば、以下のようになります。

char name1[50];
char title1[50];
int price1;
char name2[50];
char title2[50];
int price2;
char name3[50];
char title3[50];
int price3;

構造体があると

構造体を使うと、変数の定義が簡単にできます。

構造体は

struct タグ名{
    データ型 変数名1;
    データ型 変数名2;
    …
}変数リスト;

として使います。構造体内における変数1,2,…をメンバ,フィールド,要素などと呼ぶことがあります。

実際に記述すると以下のようになります。

struct catalog{
  char name[50];
  char title[50];
  int price;
}book[3];

このように完結に定義できます。

 

構造体を使用するときは

変数リスト.変数名i

とします。例えば先ほどの例なら、

book[1].price=1;

というように使用します。

 

また、新たに変数リストを作りたい場合は

struct タグ名 変数リスト;

とします。例えば、

struct catalog tmp;

のように使います。

プログラム

では、3つの本の著者、タイトル、価格を入力して、最後に出力してくれるプログラムを作成してみましょう。

#include <stdio.h>

struct catalog{
  char name[50];
  char title[50];
  int price;
}book[3];

int main(void){
	int i;
	char temp[50];
	for(i=0;i<3;i++){
		printf("著者名:");
		gets(book[i].name);
		printf("タイトル:");
		gets(book[i].title);
		printf("価格:");
		gets(temp);
		book[i].price=atoi(temp);
	}
	for(i=0;i<3;i++){
		printf("著者:%s、タイトル:%s、価格:%d円\n",book[i].name,book[i].title,book[i].price);
	}
	return 0;
}

解説

catalogという構造体を用意して、book[3]というcatalog構造体の配列を定義しています。

そして、book[i].name、book[i].title、book[i].priceに入力した値を代入しています。

ここで、atoiという関数がでてきます。

この関数は、文字をintへ変換する関数です。

 

実行すると以下のようになります。

著者名:jprogramer
タイトル:how to use computer
価格:100000
著者名:jprogramer
タイトル:how to use program
価格:201000
著者名:jsciencer
タイトル:how to learn science
価格:310200
著者:jprogramer、タイトル:how to use computer、価格:100000円
著者:jprogramer、タイトル:how to use program、価格:201000円
著者:jsciencer、タイトル:how to learn science、価格:310200円

著者:安井 真人(やすい まさと)