在 Switch 语句中转换 IF 语句
Convert IF-statements in Switch-statement
我有一系列 IF 语句,我想在 Switch 语句中进行转换,但我无法成功插入对 switch 的 case constant1 字段的求值。
我知道 Switch 是这样工作的:
switch ( expression ) { //in my case: switch (score) {
case constant1:
statement
break;
case constant2:
statement
default:
statement
break;
现在我尝试将 <= 60
放在 constant1 字段中,但当然行不通。
这是我要在Switch中转换的一系列IF语句。
if (score <= 60) {
printf("F");
}
if (score <= 70 && score > 60) {
printf("D");
}
if (score <= 80 && score > 70) {
printf("C");
}
if (score <= 90 && score > 80) {
printf("B");
}
if (score <= 100 && score > 90) {
printf("A");
}
感谢大家!
如评论中所述,您不能这样做,因为在 switch
语句中,您只能有 1
表达式。
像这样使用 if-else 语句:
if (score <= 60) {
printf("F");
} else if (score <= 70) {
printf("D");
} else if (score <= 80) {
printf("C");
}
//More statements
启用 switch 的 GCC 扩展后,您可以像这样使用:
switch (score) {
case 0...60:
break;
case 61...70:
break;
//..More cases with range
}
A switch
只检查是否相等。因此,在您的情况下,if-else 结构更适合。
不过,如果你想使用 switch 语句,你必须这样做:
switch (score)
{
case 0:
case 1:
case 2:
... // all cases up to 58
case 59:
case 60:
printf("F");
break;
case 61:
...
}
不是很漂亮而且很乏味。
正确的语法是case *constant*
,所以你永远不能写case < 60
。
你可以做的是将几个 case 命令一个一个放在下面,如下所示:
case 40:
case 41:
case 42:
case 43:
// do stuff
break;
如果 switch 语句等于 40、41、42 或 43,这将 'do stuff'。但是,我可以建议,除非您有充分的理由将 if 语句转换为 switch 语句,你不应该在这个特殊的场合。
switch
语句采用常量,而不是条件。例如,你不能说>= const
,所以你需要改变策略。
例如,在您的情况下,您可以在减去 1
之后打开两位数分数的第一位:
switch ((score-1) / 10) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5: printf("F"); break;
case 6: printf("D"); break;
case 7: printf("C"); break;
case 8: printf("B"); break;
case 9: printf("A"); break;
}
案例 0..4 使用 C 的 fall-through 机制进行 switch 语句,全部打印 "D"
.
上面的代码假定您已将分数范围检查为 1..100(含)。
您可以使用 if
或 switch
,或者您可以简单地:
printf("%c", 70 - ((score - 60) > 0 ? (score - 41) / 10 : 0));
P.S。当然,类似的可以用在switch
语句中正好有五个case
的。
有点题外话。
你可以尝试跟随伪。它简短而简单。
char cGrade = 9-(score/10)+65;
if( cGrade > 68 )
{
cGrade = 70; // for 'F'
}
else if( cGrade < 65 )
{
cGrade = 65; // for 'A'
}
我有一系列 IF 语句,我想在 Switch 语句中进行转换,但我无法成功插入对 switch 的 case constant1 字段的求值。
我知道 Switch 是这样工作的:
switch ( expression ) { //in my case: switch (score) {
case constant1:
statement
break;
case constant2:
statement
default:
statement
break;
现在我尝试将 <= 60
放在 constant1 字段中,但当然行不通。
这是我要在Switch中转换的一系列IF语句。
if (score <= 60) {
printf("F");
}
if (score <= 70 && score > 60) {
printf("D");
}
if (score <= 80 && score > 70) {
printf("C");
}
if (score <= 90 && score > 80) {
printf("B");
}
if (score <= 100 && score > 90) {
printf("A");
}
感谢大家!
如评论中所述,您不能这样做,因为在 switch
语句中,您只能有 1
表达式。
像这样使用 if-else 语句:
if (score <= 60) {
printf("F");
} else if (score <= 70) {
printf("D");
} else if (score <= 80) {
printf("C");
}
//More statements
启用 switch 的 GCC 扩展后,您可以像这样使用:
switch (score) {
case 0...60:
break;
case 61...70:
break;
//..More cases with range
}
A switch
只检查是否相等。因此,在您的情况下,if-else 结构更适合。
不过,如果你想使用 switch 语句,你必须这样做:
switch (score)
{
case 0:
case 1:
case 2:
... // all cases up to 58
case 59:
case 60:
printf("F");
break;
case 61:
...
}
不是很漂亮而且很乏味。
正确的语法是case *constant*
,所以你永远不能写case < 60
。
你可以做的是将几个 case 命令一个一个放在下面,如下所示:
case 40:
case 41:
case 42:
case 43:
// do stuff
break;
如果 switch 语句等于 40、41、42 或 43,这将 'do stuff'。但是,我可以建议,除非您有充分的理由将 if 语句转换为 switch 语句,你不应该在这个特殊的场合。
switch
语句采用常量,而不是条件。例如,你不能说>= const
,所以你需要改变策略。
例如,在您的情况下,您可以在减去 1
之后打开两位数分数的第一位:
switch ((score-1) / 10) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5: printf("F"); break;
case 6: printf("D"); break;
case 7: printf("C"); break;
case 8: printf("B"); break;
case 9: printf("A"); break;
}
案例 0..4 使用 C 的 fall-through 机制进行 switch 语句,全部打印 "D"
.
上面的代码假定您已将分数范围检查为 1..100(含)。
您可以使用 if
或 switch
,或者您可以简单地:
printf("%c", 70 - ((score - 60) > 0 ? (score - 41) / 10 : 0));
P.S。当然,类似的可以用在switch
语句中正好有五个case
的。
有点题外话。 你可以尝试跟随伪。它简短而简单。
char cGrade = 9-(score/10)+65;
if( cGrade > 68 )
{
cGrade = 70; // for 'F'
}
else if( cGrade < 65 )
{
cGrade = 65; // for 'A'
}