我是C ++的新手(来自python)。当我在If语句中比较字符串时,它始终为false。
#include <iostream>
#include <string>
using namespace std;
int main(){
string op;
int num1;
int num2;
cout << "Operator? ('+', '-', '*', '/' )" << endl;
cin >> op;
cout << "Number 1?" << endl;
cin >> num1;
cout << "Number 2?" << endl;
cin >> num2;
int result;
cout << op << endl;
if (op == "+"){
int result = num1 + num2;
}
if (op == "-"){
int result = num1 - num2;
}
if (op == "*"){
int result = num1 * num2;
}
if (op == "/"){
int result = num1 / num2;
}
else{
cout << "Invalid Operator" << endl;
return 0;
}
cout << "Result is " << result << endl;
}
当我输入输入“ +”,“ 1”和“ 1”时,它会打印“ +”,表示它读取了输入。但是然后我希望它给我“结果是2”,但它会显示“无效运算符”。我该怎么做才能解决此问题?
答案 0 :(得分:2)
最近看过几次。如果您想使用if
从多种选择中选择一种,则可以这样写
if ... else if ... else if ... else if ... else ...
不喜欢这个(你写的东西)
if ... if ... if ... if ... else ...
我知道python很奇怪,但是我希望在这种情况下它与C ++完全一样。
然后您就遇到了五个不同的result
变量的问题
int result; // first result variable
cout << op << endl;
if (op == +){
int result = num1 + num2; // second result variable
}
应该是
int result;
cout << op << endl;
if (op == +) {
result = num1 + num2;
}
等等
答案 1 :(得分:2)
您是C ++的新手。很少有建议
char
插入的string
#include <iostream>
#include <string>
using namespace std;
int main(){
string op;
int num1;
int num2;
cout << "Operator? ('+', '-', '*', '/' )" << endl;
cin >> op;
cout << "Number 1?" << endl;
cin >> num1;
cout << "Number 2?" << endl;
cin >> num2;
int result;
cout << op << endl;
if (op == "+"){
result = num1 + num2;
}
else if (op == "-"){
result = num1 - num2;
}
else if (op == "*"){
result = num1 * num2;
}
else if (op == "/"){
result = num1 / num2;
}
else{
cout << "Invalid Operator" << endl;
return 0;
}
cout << "Result is " << result << endl;
}
答案 2 :(得分:1)
由于我认为没有人提供合适的答案,因此答案基本上是错别字(我想是因为您在其他时候做得正确)。问题是这条线就在这里:
if (op == +){
老实说,我不确定这会做什么,但是我可以告诉您它没有达到您的期望。 +
是实际的C ++运算符。由于它的两侧都没有东西,因此我不确定该表达式的实际作用。但这又不是您想要的。
您想要的是带有引号+
的符号:
if (op == "+"){
与"+"
的区别在于"+"
是包含字符+的字符串,而不是实际的C ++运算符。那就是你真正想要的。它将按照您的期望进行操作,并且不会总是以“无效的运算符”结尾。
在我走之前的另一件事,即使您只是问一个错误,也不要提及您实际上有两个错误,这对您是无益的。也就是说,正如其他人提到的那样,您在实际执行操作时将在另一个作用域中创建另一个变量:
int result;
cout << op << endl;
if (op == "+"){ // decided to use a fixed version of the if statement as an example
int result = num1 + num2;
}
在C ++中,这很糟糕。第二行int
前面的result
创建一个名为result
的新变量。这个新变量几乎立即超出范围。因此,您的结果根本不会保存,而是得到未初始化的数据。
解决方案相对简单:只需在第二个示例中删除int
关键字:
result = num1 + num2;
当然,您需要在所有操作中执行操作,而不仅仅是+
。
答案 3 :(得分:1)
您每次必须使用else if
而不是if
。
这是工作代码。
#include <iostream>
#include <string>
using namespace std;
int main(){
string op;
int num1;
int num2;
cout << "Operator? ('+', '-', '*', '/' )" << endl;
cin >> op;
cout << "Number 1?" << endl;
cin >> num1;
cout << "Number 2?" << endl;
cin >> num2;
int result;
cout << op << endl;
if (op == "+")
{
result = num1 + num2;
}
else if (op == "-")
{
result = num1 - num2;
}
else if (op == "*")
{
result = num1 * num2;
}
else if (op == "/")
{
result = num1 / num2;
}
else
{
cout << "Invalid Operator" << endl;
return 0;
}
cout << "Result is " << result << endl;
}
答案 4 :(得分:0)
改进了您的代码。在这种情况下,实际上不需要比较std :: string。玩得开心!
#include <iostream>
//using namespace std;
int main()
{
char operation;
float num1, num2, result;
std::cout << "Enter Operator (+,-,/,*) : ";
std::cin >> operation;
std::cout << "\nNumber 1 : ";
std::cin >> num1;
std::cout << "\nNumber 2 : ";
std::cin >> num2;
switch(operation)
{
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '/':
result = num1 / num2;
break;
case '*':
result = num1 * num2;
break;
default:
result = num1 + num2;
}
std::cout << "Result : " << result << std::endl;
}