見出し画像

C言語教室 第16回 - 構造体あれこれ(回答提出)

こちらの記事の課題回答です。

ではさっそく。

課題

商品コードと価格をメンバ変数に持つ構造体を定義して、この構造体の配列を作成し、適当な内容を設定してから、この構造体配列の内容を出力するような関数を書きなさい。

いつもいつも課題の何かが抜けるので、箇条書きにしてみました。

・商品コードと価格をメンバ変数に持つ構造体を定義する。
・この構造体の配列を作成する。
・適当な内容を設定する。
・この構造体配列の内容を出力する。
・そのような関数を書きなさい。

よし!

プログラム

#include <stdio.h>
#include <limits.h>

struct strProduct
{
	unsigned int code;
	unsigned int price;
};

int LoadProducts(struct strProduct Products[])
{
	Products[0].code  = 1;
	Products[0].price = 98;

	Products[1].code  = 2;
	Products[1].price = 128;

	Products[2].code  = 3;
	Products[2].price = 258;

	Products[3].code  = 4;
	Products[3].price = 998;

	Products[4].code  = 5;
	Products[4].price = 1098;

	Products[5].code  = 6;
	Products[5].price = 1398;

	Products[6].code  = 7;
	Products[6].price = 10998;

	Products[7].code  = 8;
	Products[7].price = 1150000;

	Products[8].code  = 9;
	Products[8].price = 50000000;

	Products[9].code  = UINT_MAX;
	Products[9].price = UINT_MAX;

	return 10;
}

void ShowProducts(const struct strProduct Products[], int number)
{
	int i;
	printf("      code price\n");
	for (i = 0; i < number; i++)
	{
		printf("%10u ¥%u-\n", 
				Products[i].code, 
				Products[i].price);
	}
}

void funcProduct(void)
{
	struct strProduct Products[32] = {0};
	int number = LoadProducts(Products);
	ShowProducts(Products, number);
}

int main()
{
	funcProduct();
	return 0;
}

実行結果

      code price
         1 ¥98-                                                        2 ¥128-
         3 ¥258-                                                       4 ¥998-
         5 ¥1098-
         6 ¥1398-
         7 ¥10998-
         8 ¥1150000-
         9 ¥50000000-
4294967295 ¥4294967295-

コメント

本当に、シンボルにはいつも悩まされます。

今回のケースでは「Product」だらけになりそうだったので、構造体のシンボルは「strProduct」にしました。「str」は「struct」の意。

  • データのシンボルは「Product」。

  • 構造体のシンボルは「strProduct」。

商品コードと価格はデータの性質上、負値も小数もあり得ないので、型は「unsigned int」。

関数「LoadProducts」は、通常ならファイルから読み込んだりするのでしょうけど、今回は練習プログラムなので固定値を設定。


いいなと思ったら応援しよう!