-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'(一重引用符で囲まれている)は文字リテラルです。

sつまり、ではなく変数と比較する必要があります's'。したがって、コードは次のようになります。

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

コード

 if ('s' == '*')

s文字リテラルを文字リテラルと比較し*ます。これは常にfalseです。

于 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 に答える