【问题标题】:converting an if, else if, else statement into a switch statement in c++ [duplicate]在c ++中将if,else if,else语句转换为switch语句[重复]
【发布时间】:2016-02-17 14:40:22
【问题描述】:

我想知道是否可以将以下 if else 语句转换为 c++ 中的 switch 语句。如果可以的话,请告诉我如何,因为目前我在编写它时遇到了错误。

这是我试图转换成 switch 语句的 if else 语句。

if ( t>=10 && t <=18 ) {
        blue=0; green=1; red=1;
        xb_led=0; xg_led=1; xr_led=1;

    } else if ((t >18 && t<=22)||(t>22 && t<=25)) {
        green=0; blue=1; red=1;
        xg_led=0; xb_led=1; xr_led=1;
    } else {
        red=0; green=1; blue=1;
        xr_led=0; xg_led=1; xb_led=1;
    } 

这是我将其转换为的,但出现错误。

switch(t) {

        case t >=10 && t<=18:
        blue=0; green=1; red=1;
        xb_led=0; xg_led=1; xr_led=1;
        break;

        case t >18 && t<=22|| t>22 && t<=25:
        green=0; blue=1; red=1;
        xg_led=0; xb_led=1; xr_led=1;
        break;

        case t >25:
        red=0; green=1; blue=1;
        xr_led=0; xg_led=1; xb_led=1;
        break;             

    }

【问题讨论】:

  • 每个case需要有不同的值,不能有条件。
  • 您应该咨询documentation,了解switch 语句的工作原理。
  • 未经测试我会说你可以使用switch (true),然后使用条件。
  • 虽然有一个 gcc 扩展,但它允许您编写 case 语句,如 case 10 ... 18:
  • Gcc 有case-ranges (case 10 ... 18:) 的扩展名

标签: c++ if-statement switch-statement mbed


【解决方案1】:

Switch 语句用例不会仅根据标签执行。比较 case 标签值与 switch 值是否相等,在这种情况下,这没有多大意义,因为我们会进行 t == (t &gt;=10 &amp;&amp; t&lt;=18) 这样的比较。对于您的用例,我会坚持使用 if else。

【讨论】:

  • Switch 语句 case 不应该是布尔值 为什么不呢?
  • 重点是什么?只有两种情况。
  • 是的,2 case switch 语句看起来很愚蠢,但这不是重点。当您说 Switch 语句案例不应该是布尔值时。 这根本不是真的。没有理由你不能,有时你可能想要它,就像你总是想让虚假的部分运行,即使真实的部分运行。类似于只需要编写一次清理代码但始终执行的事情。
  • 在这种情况下,fallthough 相当于没有 else。我使用了“假设”这个词来避免迂腐(因为语言显然允许这样做),尽管我可以看到考虑例如打开一个常数的教育价值,而这一点对我的回答并不重要,所以我为了清楚起见,将其编辑了。
  • Switch case 语句应该始终解析为唯一值。这就是为什么人们通常使用整数(例如唯一的错误代码)。如果您使用多个可能为真或假的布尔表达式,则编译器将抛出错误,因为可能存在多个 case 语句都解析为相同值的情况。该错误将在编译时发生,即使在运行时它可能永远不会发生。
猜你喜欢
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-04
  • 1970-01-01
  • 2019-07-03
  • 1970-01-01
相关资源
最近更新 更多