问题描述
我正在尝试创建一个计算器,但这会发生.. 这是我的代码。请帮助我修复它并给出一些解释:
#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;
}
}
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"){
第一个问题是,您要求用户输入Yes
或No
,但是您测试"yes"
,"Yes"
和"yes"
不是同一字符串
第二个问题是,对相等性的检验是==
而不是=
。 =
用于分配,这与相等性测试不同。
这里有两个主要问题:
-
您要在交换机中提供
std::string
,这是不可能的。您只能将字符或整数传递给它。您可以将其转换为char
类型。 -
在条件行中有一个逻辑错误(注意注释):
if(d="yes") // it should be d == "yes"