我写了一个简单的例子来解决我在编写程序时遇到的问题。
在程序执行期间,当从函数返回值时,我得到input1和input2的值,然后从不改变。然后在程序过程中进行各种计算后不久,我得到的结果也不再可变。
我正在尝试使用switch-case比较它们,但我得到一个错误“'input1'的值在常量表达式中不可用”。
#include <iostream>
using namespace std;
char getChar()
{
char c;
cin >> c;
return c;
}
int main()
{
// it doesn't work
const char input1 = getChar();
const char input2 = getChar();
// it it works
//const char input1 = 'R';
//const char input2 = 'X';
char result = getChar();
switch(result)
{
case input1:
cout << "input1" << endl;
break;
case input2:
cout << "input2" << endl;
break;
}
return 0;
}
答案 0 :(得分:2)
您必须在编译时知道您的案例陈述。即。
switch(result)
{
case 1:
cout << "input1" << endl;
break;
case 2:
cout << "input2" << endl;
break;
}
这些行虽然const只是真正意味着只读而且在编译时没有初始化。
// it doesn't work
const char input1 = getChar();
const char input2 = getChar();
以下两行的工作原因是因为编译器只是在X&amp;在代码运行之前将R放入switch语句
// it it works
//const char input1 = 'R';
//const char input2 = 'X';
我建议您将切换更改为if语句
if(input1)
{}
else if(intput2)
{}
以下代码应该有效:
#include <iostream>
using namespace std;
char getChar()
{
char c;
cin >> c;
return c;
}
int main()
{
// it doesn't work
const char input1 = getChar();
const char input2 = getChar();
// it it works
//const char input1 = 'R';
//const char input2 = 'X';
char result = getChar();
if(result == input1){
cout << "input1" << endl;
}
else if(result == input2){
cout << "input2" << endl;
}
return 0;
}
答案 1 :(得分:0)
case
语句中使用的标签必须在编译时可供编译器使用,因此您尝试的内容将无效。
你已经成功const
,但这只是意味着它一旦初始化就不会改变。
答案 2 :(得分:0)
case
标签需要在编译时知道somenthin。变量在此上下文中无法工作。
您将需要if... else if... else if...
来模拟具有变量运行时值的switch语句