在If语句中比较字符串会引发错误

时间:2019-07-06 14:38:57

标签: c++ if-statement

我是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”,但它会显示“无效运算符”。我该怎么做才能解决此问题?

5 个答案:

答案 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 ++的新手。很少有建议

  1. 您知道c ++是statical typed。因此,您应该了解c ++的所有数据类型。就像使用单个字符时一样,您可以使用由char插入的string
  2. 您不应在每次使用时重新定义变量。
#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;
}

https://im.ezgif.com/tmp/ezgif-1-76ceb4e91c2c.gif