我想基于迭代创建一个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++;
}
}
答案 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语句。