-2

我只是从 c 迁移到 C++,并且正在尝试构建一个计算器。Int 'result' 不会被数学运算初始化。逻辑是根据操作's'将分配给'result'不同的值。这似乎不起作用。

#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;

int main ()
{
    int n1, n2;
    char s,r;
    int result = 0;
    cout<< "Enter a calculation? (y/n)"<<endl;
    cin>>r;
    while(r=='y')
    {
        cout <<"Enter the first number"<<endl;
        cin>>n1;
        cout<<"Enter the operator"<<endl;
        cin>>s;
        cout<<"Enter the second number"<<endl;
        cin>>n2;

        if ('s' == '*')
        {
            result = n1*n2;
        }
        if ('s' =='+')
        {
            result = n1+n2;
        }

        if ('s' =='-')
        {
            result = n1-n2;
        }

        if ('s' =='/')
        {
            result = n1/n2;
        }
        cout << result<<endl;
        cout<< "Enter a calculation? (y/n)"<<endl;
        cin>>r;
    }
    return 0;
}
4

2 回答 2

13

s是一个变量名,并且's'(用单引号括起来)是一个字符文字

这意味着,您必须与变量snot with进行比较's'。所以你的代码应该看起来像

if (s == '*')
{
    result = n1*n2;
}

编码

 if ('s' == '*')

将字符文字s与字符文字进行比较*,后者始终为假。

于 2013-03-07T17:40:33.077 回答
3

@OlafDietsche 说得对。

我还建议切换到一个switch-case语句:

switch(s)
{
    case '*': result = n1*n2;  break;
    case '+': result = n1+n2;  break;
    case '-': result = n1-n2;  break;
    case '/': result = n1/n2;  break;
}
于 2013-03-07T17:47:42.507 回答