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

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

解決済みの質問

switch分のケースを範囲数?にしたい

#include <stdio.h>

int main(void)
{
int a;

scanf("%d",&a);

switch(a)
{
case 1: printf("\nりんご\n"); break;
case 2: printf("\nバナナ\n"); break;
default: printf("\nその他\n"); break;
}
return 0;
}

C言語でプログラム練習しています
上の内容で正常に動くのですが
caseのところを例えば
1~10までは りんご
11~30までは バナナ
など1つの数字ではなく複数の数字にしたいのですがどうすればいいのでしょうか?
以前VBを少し経験したことがありまして
その際は
case 1 to 10
でできたのですがC言語ではできないみたいです
わかる方教えてください

投稿日時 - 2009-01-09 18:57:41

QNo.4617008

すぐに回答ほしいです

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

1から5がバナナ、6から10がりんご としたい場合
switch( a ) {
  case 1:
  case 2:
  case 3:
  case 4:
  case 5:
    printf("バナナ\n" );
    break;
  case 6:
  case 7:
  case 8:
  case 9:
  case 10:
    printf("りんご\n");
    break;
}
といった具合にしてやればいいですよ
飛んだ値でも可能です
1,3,5がバナナ 2,4,6がりんごならば
switch( a ) {
  case 1:
  case 3:
  case 5:
    printf("バナナ\n" );
    break;
  case 2:
  case 4:
  case 6:
    printf("りんご\n");
    break;
}
といった具合にします

caseを連続して記述して breakを最後のブロックだけに記述します

投稿日時 - 2009-01-09 19:31:40

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

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

回答(6)

ANo.6

#define MAX 50
int table[MAX + 1] = {
0, /* ダミー */
1,1,1,1,1,1,1,1,1,1, /* 1~10りんご */
2,2,2,2,2,2,2,2,2,2, /* 11~30ばなな */
2,2,2,2,2,2,2,2,2,2,
3,3,3,3,3,4,4,4,4,4, /* 31~35みかん、36~40なし */
5,5,5,5,5,5,5,5,5,5 /* 41~50ぶどう */
};

/* aは1~50 */
switch(table[a]) {
case 1:
りんご
break;
case 2:
ばなな
break;
case 3:
みかん
break;
case 4:
なし
break;
case 5:
ぶどう
break;
}

投稿日時 - 2009-01-11 02:19:32

ANo.5

switch( (a+9) / 10)

投稿日時 - 2009-01-10 01:42:52

ANo.4

#include <stdio.h>

int main(void)
{
  int a;

  scanf("%d",&a);

  switch(cnvNo(a))
  {
  case 1: printf("\nりんご\n"); break;
  case 2: printf("\nバナナ\n"); break;
  default: printf("\nその他\n"); break;
  }
  return 0;
}

int cnvNo(int a)
{
  if ((a >= 1) && (a <= 10))
  {
    return(1);
  } else if ((a >= 11) && (a <= 30)) {
    return(2);
  }
  return(-1);
}

投稿日時 - 2009-01-09 21:51:19

ANo.3

#include <stdio.h>

int main(void)
{
int i;

for(i = 0; i < 40; ++ i){
switch((1 <= i && i <= 30) + (11 <= i && i <= 30)){
case 1: printf("%2d りんご\n", i); break;
case 2: printf("%2d バナナ\n", i); break;
default: printf("%2d その他\n", i); break;
}
}
return 0;
}

投稿日時 - 2009-01-09 21:20:40

case 1:
case 2:

case 10:printf ("...");break;

のようにbreakしなければ求めてることは可能でしょう
長くなるようならif else使った方が見やすいと思います

お薦めはしませんがgcc拡張ではcase 0 ... 10のような書き方が可能です

投稿日時 - 2009-01-09 19:34:22

あなたにオススメの質問