bec*_*kah 5 c++ switch-statement
最近(昨天哈哈)我开始学习C++。我正在尝试制作一个简单的计算器来练习。我使用了一个 switch 语句来调用类中正确的方法(或者它是函数......不知道 c++ 的细微差别......);
但是,代码将无法编译,因为我使用字符串来定义要使用的情况,并且还定义了多个类以获得相同的结果。
这是 switch 语句(在添加其他错误之前,我只做了添加以消除任何错误):
switch(input){
case 'A': case 'a': case 'add': case 'Add':
cout << bo.addNum();
break;
default:
cout << "Not addition";
break;
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误如下:
basic.cpp:41:2: error: statement requires expression of integer type ('string'
(aka 'basic_string<char, char_traits<char>, allocator<char> >') invalid)
switch(input){
^ ~~~~~
basic.cpp:42:28: warning: multi-character character constant [-Wmultichar]
case 'A': case 'a': case 'add': case 'Add':
^
basic.cpp:42:40: warning: multi-character character constant [-Wmultichar]
case 'A': case 'a': case 'add': case 'Add':
^
Run Code Online (Sandbox Code Playgroud)
这是代码的全部内容:
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
class beckahClass{
public:
void setNum(int num1, int num2){
a = num1;
b = num2;
}
int addNum(){
return a + b;
}
int subNum(){
return a - b;
}
int divNum(){
return a / b;
}
int multNum(){
return a * b;
}
private:
int a, b;
};
int main (void){
beckahClass bo;
string input;
int a, b;
cout << "Please specify the operation to preform by the following:\n A: add\nS: subtract\nM: Multiple\nD: divide\nEnter operation: ";
cin >> input;
cout << "Enter the two nums you want to preform your operation on: ";
cin >> a >> b;
bo.setNum(a, b);
switch(input){
case 'A': case 'a': case 'add': case 'Add':
cout << bo.addNum();
break;
default:
cout << "Not addition";
break;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我也意识到可能有更有效的方法来使用逻辑;因为我刚刚开始使用 C++,我将不胜感激任何批评。我之前一直在简单地查找“地图”,想知道这是否是使用它的好例子?
谢谢。
原因是 C/C++ switch 语句采用 int 参数并且不支持 string 作为类型。虽然它支持常量数组的概念。还要提一下,C/C++ switch 语句通常生成为分支表。并且使用样式开关生成分支表并不容易string。
在 C++ 中,switch 语句作为int参数。
为什么不能在 switch 中串入并出现以下错误?
basic.cpp:42:28: warning: multi-character character constant [-Wmultichar]
case 'A': case 'a': case 'add': case 'Add':
^
basic.cpp:42:40: warning: multi-character character constant [-Wmultichar]
case 'A': case 'a': case 'add': case 'Add':
Run Code Online (Sandbox Code Playgroud)
原因是因为要生成 switch 代码,编译器必须理解两个值相等意味着什么。对于 int 和 enum 来说,这很简单,因为它们是常量值。但当涉及到字符串时,就很难出错。