2

このcプログラムの実行中にエラーが発生しました。「ケースラベルが整数定数になりません」のようなエラーが発生します。エラーを見つけるのを手伝ってください。私はcの初心者で、数週間前に始めました。よろしくお願いします。

 #include<stdio.h>
 main()  
  { int a,b,c;
  scanf("%d",&c);
   if (c<5) {
    c==a  ;
   }
   else { c==b;
   }
    switch (c)
   {
    case a:
       printf ("statement1");
       break;
    case b :
       printf(" statement2");
     break;
    }
    }
4

4 に答える 4

6

c#何らかの理由で呼び出しているように見えるCでは、caseラベルは整数定数でなければなりません

6.8.4.2-3

各caseラベルの式は整数定数式である必要があり、同じswitchステートメント内の2つのcase定数式が変換後に同じ値を持つことはできません。

これがあなたの望むものかどうかはわかりませんが、試すことができます:

switch (c) {
case 'a':
    break;
case 'b':
    break;
}

そうでなければ、多分あなたはしたい

if (c == a)
    /* ... */
else if (c == b)
    /* ... */
else
    /* ... */

ちなみに、おそらくc=aの代わりに必要ですc==a

于 2012-07-27T14:31:55.183 に答える
2

2つの問題:

  • ケースラベルの値は、ステートメントが機能するために整数値として解決される(つまり、最終的には)必要がありますcasecase変数の値に基づいてステートメントを駆動し、それをおよびcと比較する場合は、代わりに-ステートメントを検討することをお勧めします。abif

  • ここ=では、ブール比較ではなく割り当てを行う必要があります==

    c==a 
    

    たぶん欲しい

    c = a
    

    (同じことが当てはまりますc==b)- 実際、これが正しい順序であり、逆を望まないことを確認しますa = cか?これは、コードセグメントを見る可能性が高いようです。

于 2012-07-27T14:32:03.133 に答える
2

コードを修正しました。試してみて、フィードバックをください。

#include <stdio.h>
using namespace std;
int main()
{
    int a,b,c;
    scanf("%d",&c);
    if (c<5)
    {
        a = c; //here you will use "=" because you want to a became c
     }
    else
    {
        b = c; //here you will use "=" because you want to b became c
    }
    /*--------IF-------------*/
    if(c==a) //here is a condition. you will use "=="
    {
        printf("statement1");
    }
    if(c==b) //here is a condition. you will use "=="
    {
        printf ("statement2");
    }
    /*--------SWITCH-------------*/
    switch (c)
    {
    case 1: //if c is 1
    case 2: //if c is 2
    case 3: //if c is 3
    case 4: //if c is 4
    printf("statement1"); //"statement1" will appear
    break;
    default: printf("statement2"); //if c >= 5 "statement2" will appear
    }
    return 0;
}
于 2012-07-27T14:41:31.790 に答える
0

整数cをaまたはbに割り当てていますか?= not ==を使用し、割り当ての右側ではなく左側にaまたはbを配置する必要があります。このような:

if (c<5) {
    a=c;
}

それ以外の場合、aとbが値が割り当てられた整数である場合、次のように1つまたは他の値をcに割り当てることができます。

if (c<5) {
    c=a;
}

switch..Cのcase文は、整数値(cases)を切り替える(比較する)ことしかできないため、エラーが発生することに注意してください。

于 2012-07-27T14:32:17.850 に答える