如何根据iterable创建case语句?

时间:2017-10-19 14:27:33

标签: c++ loops switch-statement

我想基于迭代创建一个case语句,但我理解case表达式必须是常量。这是一个什么解决方法?

我尝试了下面的代码,但它仍然不起作用。

#include <iostream>
using std::cout;
using namespace std;

int main()
{
    int i = 0;
    while( i >= 0)
    {
        const int z = i;
        cout << "Enter a number other than " << z << "!\n";
        int choice;
        cin >> choice;
        switch(choice){
            case z: cout << "Hey! you weren't supposed to enter "<< z <<"!"; return 0; break;
            default: if(i==10)
                    {
                        cout << "Wow, you're more patient then I am, you win."; return 0;
                    }
                    break;
        }
        i++;
    }

}

2 个答案:

答案 0 :(得分:6)

case需要在编译时知道常量积分值。

所以你必须使用if - s:

if (choice == z) {
  cout << "Hey! you weren't supposed to enter "<< z <<"!";
  return 0;
} else if (i == 10) {
  cout << "Wow, you're more patient then I am, you win.";
  return 0;
}

答案 1 :(得分:0)

当遇到switch语句时,除非遇到中断,否则执行将从相应的case块一直持续到switch语句的结尾。因此,switch语句与goto语句在“精神”中更接近,而不是嵌套ifs。实现也有所不同,使用assembly branch tables完成,如此处所述。

Why can't I use non-integral types with switch

因此,像Daniel Trugman所说,你需要使用嵌套的if语句。