在 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(含)。

您可以使用 ifswitch,或者您可以简单地:

 printf("%c", 70 - ((score - 60) > 0 ? (score - 41) / 10 : 0));

Live example on ideone.com

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'
}