■この記事の概要
この記事では、C言語を使って、数字を英語の月名や和風月名に変換するプログラムを解説しています。
ポインタ配列
を用いたC89およびC99仕様での初期化方法を紹介し、月の名前を効率的に格納・表示する方法を示しています。
■ポインタ配列の初期化
#include <stdio.h>
//C89仕様でポインタ配列の初期化
static char *月の名前[] = {
"Illegal month",
"January", "February", "March",
"April", "May", "June",
"July", "August", "September",
"October", "November", "December"
};
int main(void){
int 月;
printf("月の数字を入れてね");
(void)scanf("%d",&月);
if(月 < 1 || 12 < 月){
puts("入力ミス");
return -1;
}
printf("%d月は %s\n",月,月の名前[月]);
}
0月を捨てると
月の名前[月-1]等の-1が不要になります。
参考:プログラミング言語Cの5.8章
■C99仕様の指示付きの初期化子を使うと
#include <stdio.h>
//C99仕様のポインタ配列の初期化
//:指示付きの初期化子
char *月の名前[]={
[1]="睦月",
[2]="如月",
[3]="弥生",
[4]="卯月",
[5]="皐月",
[6]="水無月",
[7]="文月",
[8]="葉月",
[9]="長月",
[10]="神無月",
[11]="霜月",
[12]="師走"
};
int main(void){
int 月;
printf("月の数字を入れてね");
(void)scanf("%d",&月);
if(月 < 1 || 12 < 月){
puts("入力ミス");
return 1;
}
printf("%d月は %s\n",月,月の名前[月]);
}
「間違ってずれて初期化」する危険が減ります。