将 if 语句转换为 switch 语句

发布于 2024-11-19 00:20:55 字数 163 浏览 1 评论 0原文

如何将以下 if= 语句转换为 switch 语句,而不需要为该区间 (41-49) 之间的每个数字创建一个案例?是否可以?

if (num < 50 && num > 40)
{
    printf("correct!");
}

How can I convert the following if=statement to a switch-statement WITHOUT needing to create a case for every number between that interval (41-49)? Is it possible?

if (num < 50 && num > 40)
{
    printf("correct!");
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

寄意 2024-11-26 00:20:55

您必须枚举开关的每种情况。编译器将其转换为跳转表,因此您不能使用范围。但是,您可以让多个案例使用相同的代码块,这可能更接近您想要的。

switch(num) {
    case 41:
    case 42:
    case 43:
    case 44:
    case 45:
    case 46:
    case 47:
    case 48:
    case 49:
        printf("correct!");
        break;
    default:
        break;
}

You have to enumerate every case for a switch. The compiler converts this to a jump table, so you can't use ranges. You can, however, have multiple cases use the same block of code, which may be closer to what you want.

switch(num) {
    case 41:
    case 42:
    case 43:
    case 44:
    case 45:
    case 46:
    case 47:
    case 48:
    case 49:
        printf("correct!");
        break;
    default:
        break;
}
流年已逝 2024-11-26 00:20:55

这又如何呢?

switch ((num-41)/9) {
case 0:
    printf("correct!");
    break;
}

What about this?

switch ((num-41)/9) {
case 0:
    printf("correct!");
    break;
}
倒数 2024-11-26 00:20:55
bool criteria1 = (num < 50 && num > 40);
switch criteria1: ...

它可能会导致多级决策网络......可怕吗?

bool criteria1 = (num < 50 && num > 40);
switch criteria1: ...

It may result in multilevel decision networks.. scary?

肥爪爪 2024-11-26 00:20:55

在 C 或 C++ 中(因为您使用的是 printf,我假设它就是这样),需要为每个选择枚举案例。

switch/caseif 之间的唯一区别是编译器可以将其转换为计算的 goto 而不是检查范围。如果 switch/case 支持范围,那就违背了开启此优化可能性的目的。

In C or C++ (since you are using printf, I'll assume that's what it is), cases need to be enumerated for each choice.

The only difference between switch/case and if is the possibility that the compiler can turn it into a computed goto instead of checking ranges. If switch/case supported ranges, that would defeat the purpose of opening the possibility of this optimizaton.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文