C++ Switch 语句

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++,我将不胜感激任何批评。我之前一直在简单地查找“地图”,想知道这是否是使用它的好例子?

谢谢。

Rah*_*thi 4

原因是 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 来说,这很简单,因为它们是常量值。但当涉及到字符串时,就很难出错。

  • 这非常有帮助。也许更好的主意是使用 elseif 逻辑? (3认同)
  • @rsheeler:- 是的,在这种情况下这将是一个更好的主意! (2认同)