开关数量问题:开关数量不是整数,无法将basic_string转换为bool



我正试图创建一个计算器,但发生了这种情况。。这是我的密码。请帮我修复它并给出一些解释:

#include <iostream>
using namespace std;
int main()
{
int a;
int b;
string c;
string d;
cout<<"Enter No. 1: ";
cin>>a;
cout<<"Enter Operation: ";
cin>>c;
cout<<"Enter No. 2: ";
cin>>b;
cout<<"So you want me to solve this: ";
cout<<a<<c<<b;
cout<<"Type Yes or No";
cin>>d;
if(d="yes"){
switch(c)
{
case '+':
cout << a+b;
break;
case '-':
cout << a-b;
break;
case '*':
cout << a*b;
break;
case '/':
cout << a/b;
break;
}
}
else{
return 0;
}


}

这是编译代码时的eroor,请修复此代码ima noob:

main.cpp: In function ‘int main()’:
main.cpp:21:9: error: could not convert ‘d.std::basic_string<_CharT, _Traits, _Alloc>::operator=, std::allocator >(((const char*)"yes"))’ from ‘std::basic_string’ to ‘bool’
if(d="yes"){
~^~~~~~
main.cpp:22:17: error: switch quantity not an integer
switch(c)

错误表明,开关中的测试必须是一个整数,但您有一个字符串。

此外,您还会混淆多个字符的string(例如"abc"(和单字符的char(例如"a"、"b"或"c"(。

要修复使用,只需更改

string c;

char c;

这之所以有效,是因为c中只需要一个字符,所以char是合适的类型,也因为C++中的char是一种整数,所以它可以在开关中使用。

你在这里有另一个错误

cout<<"Type Yes or No";
cin>>d;
if(d="yes"){

第一个问题是,您要求用户输入YesNo,但您测试的"yes""Yes""yes"不是同一个字符串。

第二个问题是相等性的测试是==而不是==用于赋值,这与相等性测试不同。

这里有两个主要问题:

  1. 您在交换机中提供std::string,这是不可能的。您只能向其中传递字符或整数。您可以将其转换为char类型。

  2. 在条件行中出现一个逻辑错误(注意注释(:

    if(d="yes") // it should be d == "yes"
    

最新更新