【問題16】配列で処理をシンプルにする完全マスター! 組み込みC言語プログラミング(18)(1/2 ページ)

何らかの数値を読み取って、それに対応する文字列を表示するプログラムは、「switch」を使うやり方を紹介しまたが、文字列の配列(char型の配列)で記述することもできます。

» 2015年02月13日 11時00分 公開
[横田一弘 埼玉県立新座総合技術高等学校 教諭,MONOist]

 本連載では、これから組み込みシステムのプログラミングを学びたい人向けに、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

 month.cを実行すると、次のような結果になります。

photo

2次元配列による文字列の配列

 文字の並んだ文字列は、C言語ではcharの配列で表されます。ただし末尾に文字列の終わりを示すヌル(ナル)文字(C言語の表記では ¥0 )が付いて、例えばJanuaryならば、

photo

 となります。

 同じ型のデータの並びは、プログラムでは配列で表現するので、文字列の並びも配列で表現できます。

 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の配列)です。図示すると次のようになります。

photo

 ここまで分かれば「月に対応する文字列」を求めるのは簡単で、月から1引いた添字の文字列を表示するだけです。

 month.cでは、13行目の

printf("英語では、%sです¥n", month[m - 1]);

 で文字列を表示しますが、ここでmonthの添字は1つだけ指定します。すると要素となる文字列の先頭文字へのポインタ(char*)に型変換されます。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.