gpt4 book ai didi

c++ - 在 C++ 中,switch 语句中可以有一系列值吗?

转载 作者:行者123 更新时间:2023-11-30 01:16:49 24 4
gpt4 key购买 nike

我想知道是否可以在 switch case 语句中包含范围。当我运行下面的代码时,出现以下错误:错误:分数不能出现在常量表达式中 案例得分 < 60:

int score;

cout << " enter score";
cin >> score;

switch(score)
{

case score < 60:
cout << "F";
break;

case score < 70:
cout << "D";
break;

case score < 80:
cout << "C";
break;

case score < 90:
cout << "B";
break;

default: cout << "A";
}

return 0;
}

最佳答案

C 中的 Switch case 实际上只是一个computed goto,而不是一个比较,如果条件不匹配则跳转到下一个 case,所以它不支持这样的 case 比较。

此外,您的示例不正确。如果 C < 60 分数将匹配所有 4 种情况,那么它会跳到哪里?与 C < 70 相同,当它匹配 3 个 case 等等。

GCC 支持 case ranges扩展但不像你预期的那样。无论如何,如果需要,您仍然可以使用它

switch (score)
{

case 0 ... 59:
cout << "F";
break;

case 60 ... 69:
cout << "D";
break;

case 70 ... 79:
cout << "C";
break;

case 80 ... 89:
cout << "B";
break;

case 90 ... 100:
cout << "A";
break;

default:
cout << "Out of range\n";
}

在我所知道的所有语言中,只有 Visual Basic 支持以下情况的比较

Select Case score
Case Is >= 0 And Is < 60

Case Is >= 60 And Is < 70

Case Is >= 70 And Is < 80

Case Is >= 80 And Is < 90

Case Is >= 90 And Is <= 100

Case Else
End Select

然而,获得范围的更好方法是将分数除以 10

const char* SCORE[] = "FDCBA";
if (score < 60)
cout << SCORE[0];
else if (score < 100);
cout << SCORE[score/10 - 5];
else if (score == 100)
cout << SCORE[4];

当然你还需要确保分数不低于0或高于100

关于c++ - 在 C++ 中,switch 语句中可以有一系列值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25799925/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com