• ベストアンサー

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言語ではできないみたいです わかる方教えてください

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

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を最後のブロックだけに記述します

その他の回答 (5)

  • chie65535
  • ベストアンサー率43% (8522/19371)
回答No.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; }

  • eroermine
  • ベストアンサー率18% (83/444)
回答No.5

switch( (a+9) / 10)

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.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); }

回答No.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; }

noname#208124
noname#208124
回答No.2

case 1: case 2: ~ case 10:printf ("...");break; のようにbreakしなければ求めてることは可能でしょう 長くなるようならif else使った方が見やすいと思います お薦めはしませんがgcc拡張ではcase 0 ... 10のような書き方が可能です

関連するQ&A

  • Switch caseの書き方について

    int a; scanf("%c", &a); switch (a) {      case 'w':        printf("a = w\n");        break;      default:        printf("?\n");        break; } 上記のように書いて「w」を入力すつと「?」が返ってきます。 int a,b; scanf("%d %c", &b,&a); で「20w」と入力すると「w」が返ってくるのですが、 「%c」だけだとうまくいかないのはどうしてでしょうか? 初歩的な質問で申し訳ないのですが、教えてください。

  • C言語エラー

    C言語をいじっているのですが、16行目と19行目の「型」の前に「;」がありませんと表示されます。 どこをどう改善すればいいか教えてもらえないでしょうか /*遊び半分*/ #include <stdio.h> #include <process.h> int main() { char dear; printf("ああああ\n"); printf("ああああ \n"); scanf_s("%c", &dear); switch (dear){ case 'A04': ; int main(void); { printf("ああああ\n"); int main(void); printf("あああ\n"); printf("あああ\n"); break; system("pause"); return 0; } case 'C34' : printf("\n"); break; case 'E24' : printf("\n"); break; case 'F38' : printf("\n"); break; default: printf("メッセージはありません\n"); break;} return 0;

  • C言語 switch文について

    C言語初心者です。 以下のようにC言語でプログラムを書いてみたのですが、 一つの入力に対して、対応するcase文に加えてdefault部の内容も表示されてしまいます。 (aを入力すると day before yesterday と day after tomorrowが表示されるような感じです) i,j,k などを使ってどう実行されているかを調べると、どうやら一回の入力に対して二回switch部を回っているようです。 そうにしろなぜaに対してdefaultへ飛ぶのか理解できませんが・・ また、最初の宣言をchar から int にして(caseは、case 1とかに適当に変えて)やると、正常に動くのも不可解です。 どうなっているんでしょうか・・ どなたかご教授願えると幸いです。よろしくお願いいたします。 #include <stdio.h> int main(void) { char n; int i=0,j=0,k=0; k++; while(scanf("%c",&n),n!='E'){ i++; switch(n){ case 'a': puts("day before yesterday"); break; case 'b': puts("yesterday"); break; case 'c': puts("today"); break; case 'd': puts("tomorrow"); break; default: puts("day after tomorrow"); break; j++; } } printf("%d\n",i); printf("%d\n",j); printf("%d\n",k); return 0; }

  • C言語のswitch文について間違っているところを教えてください

    初めに初心者ですので間違っているところは説明つきの回答をしていただければありがたいです。 今回switch文を使って 「足し算、引き算、掛け算、割り算」のプログラムを作ったつもりなのですが、intを使うと割り算の小数点が出ないしfioat文を使うとswitch文には、使えないと出るしどのようにしたら良いのか御回答よろしくお願いします。 (今は、int文でプログラムを作っているつもりです。) #include <stdio.h> void main (void) { int a,b,k; printf("どのような計算をしたいか数字を選んでください。\n"); printf(" 1.足し算 (例 a+b)\n"); printf(" 2.引き算 (例 aーb)\n"); printf(" 3.掛け算 (例 a×b)\n"); printf(" 4.割り算 (例 a÷b)\n"); printf("計算したい番号を入力してください "); scanf("%d",&k); switch (k){ case 1: printf("aを入力してください "); scanf("%d",&a); printf("bを入力してください "); scanf("%d",&b); printf("\n答えは a+b で %d です\n",a+b); break; case 2: printf("aを入力してください "); scanf("%d",&a); printf("bを入力してください "); scanf("%d",&b); printf("\n答えは aーb で %d です\n",a-b); break; case 3: printf("aを入力してください "); scanf("%d",&a); printf("bを入力してください "); scanf("%d",&b); printf("\n答えは a×b で %d です\n",a*b); break; case 4: printf("aを入力してください "); scanf("%d",&a); printf("bを入力してください "); scanf("%d",&b); printf("\n答えは a÷b で %d です\n",a/b); break; default: printf("明記してあるどれかの数字を再入力してください"); } }

  • switch文とscanfについて

    ソースコード------------------------------------- #include <stdio.h> void main(){ int i; char s, ch; while(1){ printf("Input 1 or 2\n"); scanf("%c", &s); switch(s){ case '1' : printf("Input a number\n"); scanf("%d", &i); printf("You input '%d'\n", i); break; case '2' : printf("Input a character\n"); scanf("%c", &ch); printf("You input '%c'\n", ch); break; } } } ----------------------------------------------- 実行例----------------------------------------- Input 1 or 2 1 Input a number 4 You input '4' Input 1 or 2 Input 1 or 2 //------(1) 2 Input a character You input ' //------(2) ' Input 1 or 2 ----------------------------------------------- (1)について。 なぜ"Input 1 or 2"が二回繰り返されているのですか。 (2)について。 scanfが呼び出されて入力待ちになることを期待しているのですが、 なぜ(2)のようになってしまうのでしょうか。

  • 【C初心者】+,-,*./について【電卓】

    【C初心者】+,-,*./について【電卓】 次のようなプログラミングを作りました。 きちんと実行できるのですが見ての通りややこしいプログラムになってます #include <stdio.h> int main(void) { int ope; double n2,n3; printf("整数1:"); scanf("%lf",&n2); puts("ADD=0,SUB=1,MUL=2,DIV=3");scanf("%d",&ope); printf("整数2:"); scanf("%lf",&n3); switch (ope) { case 0 : printf("計算すると%fになります.?n",n2+n3); break; case 1 : printf("計算すると%fになります.?n",n2-n3); break; case 2 : printf("計算すると%fになります.?n",n2*n3); break; case 3 : printf("計算すると%fになります.?n",n2/n3); break; default: printf("計算出来ません.?n"); break; } return (0); } printf文をcaseの中で5回も使っています 私としては(以下適当です、すいません) case 0 : sign= + ;break; case 1 : sign= - ・ ・ ・ default : 計算できません error=1 ;break; if (error != 0) printf("計算すると%fになります.?n",n2 sign n3); みたいな感じを想像しているのですが signはintとかcharのどれにしたらよくて signに"+"をいれて計算させるにはどうしたらいいんでしょう

  • 素数を判定するプログラム

    素数を判定するプログラムをC言語で作れという問題があったのですが、以下のものをビルドして実行したら途中で止まってしまいました。(例えば5と入力する)しかし、1以下の場合は正常にif文が評価されました。 // homework4.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 #include <stdio.h> int main(int argc, char* argv[]) { int number; int n; int i; printf("1より大きい整数を入力してください: "); scanf("%d", &number); if (number <= 1) { printf("1より大きい整数を入力してください\a: "); scanf("%d", &number); } for (n = 2; n = number - 1; n++) { i = number % n; if (i = 0) { printf("%dは素数ではありません", number); break; } } printf("%dは素数です", number); return 0; } 自分ではどこがおかしいのかさっぱりわかりません。よろしくお願いします。

  • c言語についての質問です。

    #include<stdio.h> int main(void){ double a,b; int c; printf("Type two numbers\n"); scanf("%lf",&a); scanf("%lf",&b); printf("Select 1)addition, 2) subtraction, 3)multiplication or 4)division\n"); scanf("%d",&c); switch(c){ case1: printf("%.6f + %.6f = %.6f",a,b,a+b); break; case2: printf("%.6f - %.6f = %.6f",a,b,a-b); break; case3: printf("%.6f * %.6f = %.6f",a,b,a*b); break; case4: printf("%.6f / %.6f = %.6f",a,b,a/b); break; default: printf("Error! Select 1, 2, 3 or 4\n"); break; } return 0; このプログラムをコンパイルして実行しても 正しく動きません。なぜですか?

  • 昇順に並べ替えるプログラム(続き)

    (C言語)実行例のような3つの整数を読み込み昇順に並べ替えるプログラムは途中までわかったのですがあとはどう修正・追加をすればいいのでしょうか? 実行例 1:45 2:43 3:38 昇順に並べ替えました。 1:38 2:43 3:45 途中までのプログラム #include<stdio.h> int main(void) { int n1,n2,n3; printf("1:"); scanf("%d",&n1); printf("2:"); scanf("%d",&n2); printf("3:"); scanf("%d",&n3); printf("昇順に並べ替えました。\n"); return 0; }

  • 関数について

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

専門家に質問してみよう