• ベストアンサー

switchの使い方を教えてください。

ある文字を入れて、それを数字か文字か判別するプログラムを作りたいのですがうまく行かないのでご教授ください。 下記のプログラムで作ると0から9までの数字は判別できるのですが、数字が2桁以上になると判別できません。 2桁以上の数字を識別させるにはどうしたらいいのでしょうか? int a; printf("文字を入れて下さい"); scanf("%d",&a); switch ( a ){ case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9:      printf("数字です"); break; default: printf("数字以外の文字です");      break; }

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

  • ベストアンサー
  • shige_70
  • ベストアンサー率17% (168/946)
回答No.1

まず、int型の変数は『数字』ではなく『数値』を入れるものです。逆にいうと、数でないものは入れられません。 次に、scanf()で。"%d"で受けている場合は『数値』しか受け付けません。数字を含まない文字列を入力したら、その変数にはなにも代入されません。 というか、そもそもscanf()は複雑怪奇な関数で、想定外の入力があった場合の動作が予測できないことが多いので、使うべきではないのです。fgets()を使用して文字列として読み込み、必要に応じてatoi()等で変換するなどのやりかたをした方が良いです。 それから、switch文は、『数値』に基づいた分岐をするものです。 ご質問のプログラムですと、単にaの値が0,1,2,...,9のときとそうでないときに分岐しているだけです。2桁の数は0~9ではありませんから当然defaultのほうにいってしまいます。 直すとしたら、caseですべての数を列挙する、、、なんてできるわけないですし、『数値』で判別してる以上、そもそも『文字列』をあつかえないのです。 正しいやりかたは、入力を文字列として読み込み、それをループで1文字ずつ数字かどうかチェックしていく、という方法です。 答えは書きません。あとは考えてみてください。もちろんswitch文も使えます。

katuobusidou
質問者

お礼

おかげで無事にできました! アドバイスありがとうございました。

その他の回答 (1)

  • E46-M3
  • ベストアンサー率16% (1/6)
回答No.2

#include <stdio.h> void main() { char str[1024]; int cnt,judge; gets(str); for(judge=1,cnt=0; str[cnt] != '\0'; cnt++) { if(str[cnt] < '0' || str[cnt] > '9') { judge=0; break; } } if(judge == 1) printf("数字だった\n"); else printf("文字でしょ\n"); } >ある文字を入れて、それを数字か文字か判別するプログラムを作りたい のでしたらswitch文は必要ないですよ。 パソコンからの入力を文字列として取得して 文字としての「数字」かどうかを調べればよいです。 (上の処理で言うところのfor文のところです) >switchの使い方を教えてください。 という表題から文字列をループさせて判定させる 方法をすでにご存知でしたらごめんなさい。

katuobusidou
質問者

お礼

回答ありがとうございました。 とても参考になりました!

関連するQ&A

専門家に質問してみよう