- ベストアンサー
関数について
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; }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
month関数のcaseの記述に問題があるからです。 '1'のように、シングルクォートで数字を囲うと、 数字ではなく、ASCIIコードとして扱われます。 ASCIIコード http://www.psl.ne.jp/perl/pdojo00b.html つまり、case '1'はcase 0x31と書いたのと同じになります。 素直にシングルクォートを取り去って、 case 1: のようにすればうまくゆくでしょう。
その他の回答 (2)
- koko_u_
- ベストアンサー率18% (459/2509)
case '3' のように、int と char を比較しているからだけど、switch 文を使うのを止めましょう。 特に、fall through するようなプログラムを書いちゃダメ。
お礼
switch文を使わないでできるやり方考えてみます!ありがとうございました!
- ibe_tattsu
- ベストアンサー率70% (36/51)
文字と数字は違います。 ASCIIコードで表すと、明確になります。 例えば、'0'(0という文字) は 48(10進数)となります。 ’(シングルクォーテーション)で囲むと文字として扱われます。 今回の場合、引数aは普通の数を表すものなので、 case '3':などではなく、case 3:と表さなければ意味がありません。
お礼
ありがとうございます。できました!!
お礼
詳しい解説ありがとうございます。できました!!