int main() {
int marks;
printf("enter the marks :");
scanf(" %d", &marks);
switch (marks) {
case (marks >= 90):
printf("Excellent");
break;
case (marks < 90 && marks >= 75):
printf("very good");
break;
case (marks < 40):
printf("poor");
break;
default:
printf("no marks available");
}
return 0;
}
我最近开始学习C并且在运行switch
语句时遇到了这个案例标签错误。
请有人解决这个问题吗?
答案 0 :(得分:1)
案件必须是不变的。 case (marks>=90):
不使用常量。
每个
case
标签的表达式应为整数常量表达式,case
switch语句中的same
个常量表达式中没有两个在转换后具有相同的值“§6.8 .4.2 3
示例:
switch (grade) {
case 'A': printf("Excellent"); break;
case 'B': printf("very good"); break;
case 'C': // fall though (no break)
case 'D': printf("poor"); break;
default: printf("Hmmm");
}
使用if(), else if(), else
// switch(marks){
// case (marks>=90):
if (marks>=90) {
printf("Excellent");
} else if (marks>=75) {
printf("very good");
} else if (marks < 40){ // Perhaps OP wants (marks > 40) here
printf("poor");
} else {
printf("no marks available");
}
答案 1 :(得分:1)
To&#34; fix&#34;这个,你必须写
switch( marks ) // branch to the label corresponding to the value stored in marks
{
case 100:
case 99:
// repeat with cases 98 through 91.
case 90:
printf( "Excellent!\n" );
break;
case 89:
case 88:
// repeat with cases 87 through 76
case 75:
printf( "very good\n" );
break;
// pattern should be obvious from here
}
case
标签必须是整型常量表达式,基本上可以在编译时进行评估。像marks >= 90
这样的关系表达式不算作常量表达式。
switch
分支到与marks
的值对应的标签; IOW,如果您想在marks
的值从90
到100
之间执行某个操作,那么您为每个值添加一个单独的标签。
您通常不会使用switch
语句,其中包含值范围,如下所示;使用if-else
语句可以做得更好。
修改强>
供参考,以下内容可用作case
标签:
'A'
,'?'
,'\n'
等); 就C而言,const
- 限定变量不是常量表达式,因此您不能执行以下操作:
const int foo = 10;
...
switch( bar )
{
case foo: ... // compiler will yell at you here
您无法在switch
中的字符串上进行分支;但是,您可以为字符串计算整数哈希值,并根据该值进行分支:
#define FOO_HASH 0xb887389 // result of running hash function on "foo"
#define BAR_HASH 0xb8860ba // result of running hash function on "bar"
/**
* djb2 is a popular hash function
* see http://www.cse.yorku.ca/~oz/hash.html for others
*/
unsigned long hash( const char *text )
{
const unsigned char *str = (const unsigned char *) text;
unsigned long hash = 5381;
int c;
while (c = *str++)
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
return hash;
}
char text[SIZE];
if ( !fgets( text, sizeof text, stdin ) )
// bail on input error
// remove newline from text somehow
switch( hash( text ) )
{
case FOO_HASH:
// do something
break;
case BAR_HASH:
// do something else
break;
}
答案 2 :(得分:0)
你不能在案件中提出条件。来自https://www.tutorialspoint.com/cprogramming/switch_statement_in_c.htm:
案例的常量表达式必须与交换机中的变量具有相同的数据类型,并且必须是常量或文字。