2

运行此 c 程序时出错。我收到一个错误,例如“case label does not reduce to an integer constant”。帮助我找出我的错误。我是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 语句中的任何两个 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

我更正了你的代码。请尝试并给我反馈:

#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 回答
2

2个问题:

  • 您的案例标签的值需要解析(即最终)为整数值,以使case-statement 起作用。如果您想case根据变量的值驱动语句c并将其与aand进行比较b,您可能需要考虑使用if- 语句。

  • 您需要在这里进行分配=而不是布尔比较==

    c==a 
    

    可能想要

    c = a
    

    (同样适用于c==b)- 实际上,您确定这是正确的顺序,并且您不想要相反的顺序a = c吗?这似乎更有可能查看您的代码段。

于 2012-07-27T14:32:03.133 回答
0

您是将整数 c 分配给 a 还是 b?您应该使用 = 而不是 == 并将 a 或 b 放在作业的左侧,而不是右侧。像这样:

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

否则,如果 a 和 b 是具有赋值的整数,则可以将一个或另一个值赋给 c,例如:

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

请记住,C 中的 switch..case 语句只能在(比较)整数值(案例)之间切换,这就是您收到错误的原因。

于 2012-07-27T14:32:17.850 回答