C言語では「構造体」という考え方があります。
初めのうちは、「構造体をつかうとよりわかりづらくなる」と感じることでしょう。
しかし、大きなプログラムを作成するときは、必須のものとなります。
構造体とは
構造体とは、自分で変数を定義する。
ということです。
今までは、「char」や「int」などとあらかじめ設定されているものを使用してきました。
しかし、それでは不自由に感じることもあります。(現時点では無いと思いますが)
実際に書いてみましょう。
ソースコード
#include<stdio.h>
struct car{
int bangou;
double gasorin;
};
int main(void)
{
struct car a;
a.bangou=1234;
a.gasorin=123.456;
printf("車の番号は%dで、ガソリンは%lfです。\n",a.bangou,a.gasorin);
return 0;
}
構造体と呼ばれる部分はここです。
struct car{
int bangou;
double gasorin;
};
日本語に直してみると、
carという名前の変数をつくれ。中身は、「int bangou」と「double gasorin」である。
という意味です。
複数の変数を一つにまとめるという感覚ですね。
この変数の名前は、「struct car」です。使い方としては「int」や「char」とほぼ変わりません。
ですから、
struct car a;
というのは、struct car型のaを確保しろという意味です。
ややこしくなってきましたね。
ですが、ここまで来れば後は「代入」と「出力」ですから。
代入は
a.bangou=1234;
a.gasorin=123.456;
というところです。
日本語に直すと
a(struct car型)のbangouに1234を代入する。a(struct car型)のgasorinに123.456を代入する。
という意味です。
.(ピリオド)は構造体のメンバ(ここではstruct carの中身、すなわちint bangou;やdouble gasorin;など)にアクセスするときに使います。
出力はそのまま「a.bangou」と「a.gasorin」を使用します。
これが基本的な構造体の使い方です。
練習問題
問題1 あなたの年齢と身長を出力しなさい。(ただし構造体を使うこと)
問題2 今日の月日を入力して出力しなさい。(ただし構造体を使うこと)
練習問題解答
問題1解答
#include<stdio.h>
struct car{
int nenrei;
double sintyou;
};
int main(void)
{
struct car a;
a.nenrei=20;
a.sintyou=175.5;
printf("年齢は%d歳で、身長は%lfセンチメートルです。",a.nenrei,a.sintyou);
return 0;
}
構造体の中では、int型とdouble型を使用しています。
printfで出力するときは、%dを使うのか%lfを使うのか注意してください。
問題2解答
#include<stdio.h>
struct car{
int tuki;
int niti;
};
int main(void)
{
struct car a;
printf("今日は何月ですか\n");
scanf("%d",&a.tuki);
printf("今日は何日ですか\n");
scanf("%d",&a.niti);
printf("今日は%d月%d日です。",a.tuki,a.niti);
return 0;
}
ここでは、scanfの書き方がきもとなります。
a.tukiの方はint型なので入力するときは%dを使います。
&をつけることを忘れないようにしましょう。
まとめ
はっきりいってこの時点で、構造体を使うメリットがありません。
しかし、より複雑なプログラムをするときに役に立つことは確かです。
たとえば、学校の生徒の身長と体重を管理したいとき、いちいち「double」を使って変数を書いていくのはめんどくさいですよね。
そんな時に構造体を一つ書くだけで、大幅に時間と労力を短縮することができます。
覚えておいて損はないでしょう。