みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

関数について

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;
}

投稿日時 - 2007-04-16 01:32:17

QNo.2924757

困ってます

質問者が選んだベストアンサー

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

素直にシングルクォートを取り去って、
case 1:
のようにすればうまくゆくでしょう。

投稿日時 - 2007-04-16 01:47:35

お礼

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

投稿日時 - 2007-04-19 13:28:06

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

case '3' のように、int と char を比較しているからだけど、switch 文を使うのを止めましょう。
特に、fall through するようなプログラムを書いちゃダメ。

投稿日時 - 2007-04-16 01:41:06

お礼

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

投稿日時 - 2007-04-19 13:29:25

ANo.1

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

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

投稿日時 - 2007-04-16 01:38:23

お礼

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

投稿日時 - 2007-04-19 13:27:11

あなたにオススメの質問