dポイントプレゼントキャンペーン実施中!

C言語の関数プログラムで、月を入力すると季節を表示する関数を作っているのですが、上手くいきません・・・。何か違うのでしょうか。

#include <stdio.h>

void month(int a)
{
switch(a)
{
case '3': case '4': case '5':
printf("春です。");
break;
case '6': case '7': case '8':
printf("夏です。");
break;
case '9': case '10': case '11':
printf("秋です。");
break;
case '12': case '1': case '2':
printf("冬です。");
break;
default:
printf("そのような月はありません。");
break;
}
}

int main(void)
{
int m;

printf("月を表示してください:");
scanf("%d",&m);

month(m);

return 0;
}

A 回答 (3件)

month関数のcaseの記述に問題があるからです。


'1'のように、シングルクォートで数字を囲うと、
数字ではなく、ASCIIコードとして扱われます。
ASCIIコード
http://www.psl.ne.jp/perl/pdojo00b.html
つまり、case '1'はcase 0x31と書いたのと同じになります。

素直にシングルクォートを取り去って、
case 1:
のようにすればうまくゆくでしょう。
    • good
    • 0
この回答へのお礼

詳しい解説ありがとうございます。できました!!

お礼日時:2007/04/19 13:28

case '3' のように、int と char を比較しているからだけど、switch 文を使うのを止めましょう。


特に、fall through するようなプログラムを書いちゃダメ。
    • good
    • 0
この回答へのお礼

switch文を使わないでできるやり方考えてみます!ありがとうございました!

お礼日時:2007/04/19 13:29

文字と数字は違います。


ASCIIコードで表すと、明確になります。
例えば、'0'(0という文字) は 48(10進数)となります。
’(シングルクォーテーション)で囲むと文字として扱われます。

今回の場合、引数aは普通の数を表すものなので、
case '3':などではなく、case 3:と表さなければ意味がありません。
    • good
    • 0
この回答へのお礼

ありがとうございます。できました!!

お礼日時:2007/04/19 13:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!