我对switch-case语句有疑问。我读到了' const变量'可用于开关盒。
然而,以下程序给我一个错误案例标签不会减少为整数常量
#include <stdio.h>
int main()
{
int const var = 3;
int num=3;
switch (num)
{
case var:
printf("constant var");
break;
}
}
我在哪里弄错了?
答案 0 :(得分:1)
在C.所有情况下,标签必须是编译时常量,const
变量是只读的,但没有常量。所以,你可以这样做
#define var 3
而不是
int const var = 3;
答案 1 :(得分:1)
根据C标准(N1570委员会草案):
6.8.4.2 The switch statement
每个case标签的表达式应为整型常量表达式,并且同一switch语句中的两个case常量表达式在转换后不应具有相同的值。 switch语句中最多可能有一个默认标签。 (任何封闭的switch语句都可以有一个默认的标签或case常量表达式,其值可以在封闭的switch语句中复制case常量表达式。)
6.6 Constant expressions
定义integer constant expression
整数常量表达式117)应具有整数类型,并且只能具有整数常量的操作数,枚举常量,字符常量,结果为整数常量的sizeof表达式,_Alignof表达式以及作为强制转换的直接操作数的浮点常量。整数常量表达式中的转换运算符只能将算术类型转换为整数类型,除非作为sizeof或_Alignof运算符的操作数的一部分。
答案 2 :(得分:0)
变量包含常量值,而在创建常量变量时,它不会改变变量的目标。它始终是一个变量,switch case只采用常量值而不是变量。
#include <stdio.h>
int main()
{
int const var = 3;
int num=3;
switch(num)
{
case var: // use a constant value(Not variable) here
printf("constant var");
break;
}
}
答案 3 :(得分:0)
你的开关盒必须有这样的条件,而不是var
#include <stdio.h>
int main()
{
int const var = 3;
int num=3;
switch(num)
{
case 3:
printf("constant var");
break;
}
}
而是使用#define var 3
之类的:
#include <stdio.h>
#define var 3
int main()
{
//const int var = 3;
int num=3;
switch(num)
{
case var:
printf("constant var");
break;
}
return 0;
}
在你的代码中,switch case正在寻找var constant而不是case 3
答案 4 :(得分:-1)
当您尝试切换大小写时,切换通常取决于分配给变量的值(在您的情况下,变量为num
,其值为3)。这个变量的值甚至可以改变。没有规则,其值被切换的变量(num
)应该是一个常量整数。开关案例不适用于硬编码值。取决于特定开关案例将执行的变量的值,甚至可以更改值(在您的代码中它不会,因为您已将其硬编码为3)请尝试此代码
#include <stdio.h>
int main()
{
//int const var = 3;
int num=3;
switch(num)
{
case 3: //If the value of num is "3", then execute this case.
printf("constant var");
break;
case 4: //If the value of num is "4", then execute this case.
printf("Test case");
break;
default: //If the value of num is anything other than "3" and "4", then execute this case
printf("Default case");
break;
}
return 0; //This should be included as you are returning an integer
}
在开关案例中,你应该提到(num
)的值,具体取决于案件的执行情况。此外,请注意,当您将main()
的返回类型声明为整数时,最好在最后添加return 0
。使用num=3
运行代码后,请使用num=4
和num=5
尝试相同的代码。