【問題16】配列で処理をシンプルにする:完全マスター! 組み込みC言語プログラミング(18)(1/2 ページ)
何らかの数値を読み取って、それに対応する文字列を表示するプログラムは、「switch」を使うやり方を紹介しまたが、文字列の配列(char型の配列)で記述することもできます。
本連載では、これから組み込みシステムのプログラミングを学びたい人向けに、C言語を使ったマイコン制御プログラムの“イロハ”を解説していきます。
毎回少しずつステップアップしていけるよう、本文の最後で問題を出し、次回その解答と解説を紹介していきます。
配列を使って処理をシンプルにする
問題16:
何月かを入力し、その月を表す英語を表示するプログラムを作ってください。
何らかの数値を読み取って、それに対応する文字列を表示するプログラムは、既に「問題5(switch文と多岐選択をマスターしよう!!)」で登場しました。今回はswitch文を使わないで、文字列の配列を用いてプログラムを作ってみます。では解答を発表します。
#include <stdio.h> void main(void) { char month[12][10] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; int m; printf("月を入力してください->"); scanf("%d", &m); if (m >= 1 && m <= 12) printf("英語では、%sです¥n", month[m - 1]); else printf("1から12までの数で入力してください¥n"); }
month.cを実行すると、次のような結果になります。
2次元配列による文字列の配列
文字の並んだ文字列は、C言語ではcharの配列で表されます。ただし末尾に文字列の終わりを示すヌル(ナル)文字(C言語の表記では ¥0 )が付いて、例えばJanuaryならば、
となります。
同じ型のデータの並びは、プログラムでは配列で表現するので、文字列の並びも配列で表現できます。
month.cでは、5行目の
char month[12][10] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
が文字列の配列で、添字を表す角カッコ([と])が2つ連続しているので「2次元配列」と呼びます。monthは大きさが12×10のcharの配列(より正確には12の文字列の配列であり、1つ1つの文字列は大きさ10のcharの配列)です。図示すると次のようになります。
ここまで分かれば「月に対応する文字列」を求めるのは簡単で、月から1引いた添字の文字列を表示するだけです。
month.cでは、13行目の
printf("英語では、%sです¥n", month[m - 1]);
で文字列を表示しますが、ここでmonthの添字は1つだけ指定します。すると要素となる文字列の先頭文字へのポインタ(char*)に型変換されます。
Copyright © ITmedia, Inc. All Rights Reserved.