gpt4 book ai didi

C++ 开关语句

转载 作者:太空狗 更新时间:2023-10-29 20:26:19 30 4
gpt4 key购买 nike

最近(昨天哈)我开始学习C++。我正在尝试制作一个简单的计算器来练习。我使用了一个 switch 语句来调用类中的正确方法(或者它是否起作用……不知道 c++ 的细微差别……);

但是,代码不会编译是因为我使用字符串来定义要使用的大小写,并且还定义了多个类以获得相同的结果。

这是 switch 语句(我只做了添加以在添加其他错误之前消除任何错误):

switch(input){
case 'A': case 'a': case 'add': case 'Add':
cout << bo.addNum();
break;
default:
cout << "Not addition";
break;
}

我得到的错误如下:

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':
^

完整代码如下:

#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;
}

我也意识到可能有更有效的方法来使用逻辑;因为我刚刚开始使用 C++,所以我将不胜感激任何批评。我之前一直在简单地查找“ map ”,想知道这是否是一个使用它的好例子?

谢谢。

最佳答案

原因是C/C++的switch语句接受一个int参数,不支持string类型。虽然它支持常量数组的概念。还要提一下,C/C++ switch 语句通常生成为 branch tables. 并且使用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':

原因是因为要生成 switch 的代码,编译器必须理解两个值相等的含义。对于 int 和 enum,这很简单,因为它们是常量值。但是当涉及到字符串时,就很难导致错误。

关于C++ 开关语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20163913/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com