-3

これは、switch ステートメントを使用してどこが間違っている可能性があるかを理解するための初心者の質問です。タスクは次のとおりです 。ユーザーが入力した 2 つの整数値を受け入れるプログラムを作成します。最初の整数を 2 番目の整数で割った結果を、小数点以下 3 桁の精度で表示します。プログラムでゼロ除算をチェックすることを忘れないでください。

2 番目のオペランドが 0 かどうかをテストするために、switch ステートメントを使用しました (if.​​..else で実行できることはわかっています)。ただし、プログラムはオペランドとして 0 を受け入れますが、なぜこれが起こるのかわかりません。除算を 0 で計算しようとすると、プログラムは単に失敗します。どこが間違っているのか、ヒントを教えてください。私のコードは以下の通りです:

  #include <stdio.h>

  int main (void)

  {
         int a, b;


   printf ("Type two integer values: ");
   scanf ("%i %i", &a, &b);

   switch (a/b)
   {

   case 'b == 0':
        printf ("\n The divisor can't be 0.\n");

   break;

   default:
           printf ("The result of dividing %i by %i is %.3f\n", a, b,(float) a / b);

   break;
  }
  return 0;

  }

ご協力いただきありがとうございます!

4

3 に答える 3

2
 switch (b)
   {
   case 0:
        printf ("\n The divisor can't be 0.\n");

   break;
   default:
           printf ("The result of dividing %i by %i is %.3f\n", a, b,(float) a / b);
   break;
  }

また、次の式は次のcaseような定数でなければならないことに注意してください。

case 0:
case 1:
case 'a':
case 'b':

そこに..それはそれを修正する必要があります。

于 2013-02-05T21:09:29.013 に答える
0

switchステートメントをswitch(b)に変更してみてください

于 2013-02-05T21:20:40.440 に答える
0

ケース ラベルを条件式にすることはできません。それらは定数の整数値でなければなりません。

この場合、次のように記述します。

switch (b) {
case 0:
    /* stuff goes here */
    break;
}

ただし、ここでの switch ステートメントは非常に奇妙です。if ステートメントの方が適切です。

于 2013-02-05T21:15:43.567 に答える