【问题标题】:How to keep track of order in which switch case values are executed? [closed]如何跟踪 switch case 值的执行顺序? [关闭]
【发布时间】:2014-09-09 23:48:45
【问题描述】:

如何跟踪switch case 语句的执行顺序?

例如:

while (some_boundary) {    
    switch (value) {
        case a:
            do something;
            move to next value;
            break;
        case b:
            do something;
            move to next value;
            break;
        case c:
            do something;
            move to next value;
            break;
    } 
}

我想知道switch是否被执行abc或bac或cab等

有什么想法吗?还是通过if/else 实现更有意义?

【问题讨论】:

  • 我不确定你的意思。 value 只会匹配一个 switch 项。
  • 可能你问的是switch内部是如何实现的?
  • 他的意思是跟踪。 switch 在 while 循环中,所以他想知道在 while 迭代中 switch 选择的顺序。
  • 如果任何答案解决了您的问题,请将其标记为已接受的答案。否则,请告诉我们,以便我们进一步为您提供帮助。

标签: c++ c switch-statement


【解决方案1】:

您可以在每次迭代时使用相应迭代的值保存一个向量:

std::vector<int> sequence;
while (some_boundary) {
    int temp = computeValue(); // Or however you get your value.
    sequence.push_back(temp);
    switch (temp) {
    case a:
        //do something;
        break;
    case b:
         //do something;
        break;
    case c:
        //do something;
    break;
    } 
}

编辑:这是假设值设置在 while 和 switch 之间的某个位置,因此您可以提前保存它。其他选项是在每种情况下都包含 push_back 指令,但更“脏”。预分配向量也可以节省一些计算时间。

Edit2:根据建议修改代码,以确保计算出新值。

【讨论】:

  • 您始终可以“提前保存”,即使您是 switch'ing 计算的值。只需将计算结果赋值给一个临时变量,将变量保存在向量中,然后在变量上switch。
  • 对不起,我不明白你的意思。这不是我要说的吗?
  • switch 必须有一个具体的值来评估,无论是switch(variable) 还是switch(expression)。在第一种情况下,你会做push_back(variable); switch(variable)。在第二种情况下,您将改为使用int temp = expression; push_back(temp); switch(temp)。因此,您始终可以保证“在while和switch之间的某个位置设置了一个值,因此您可以提前保存它”,不需要假设。我不是在批评您回答中的代码,而是在批评您的“编辑”措辞。
  • 我不认为编辑是必要的,因为原始版本有“移动到下一个值”。也许这将有助于明确“获取初始值”。或者,保留编辑并完全删除“移动到下一个值”。
【解决方案2】:

如果您只想知道(而不是保存结果),您可以在每次迭代时输出值。试试

cout << value << endl;

作为 while 循环的第一行。

【讨论】:

    猜你喜欢
    • 2011-08-14
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 2012-02-25
    • 2017-02-03
    • 1970-01-01
    相关资源
    最近更新 更多