0

ユーザーが 0 で除算したかどうかのエラー チェックで少し問題があります。ユーザーが 0 で除算を要求した場合、結果の文字列は、0 で除算を実行することは違法であることを示しているはずです。次のようになります。

あなたの操作は分割です: 6/0 違法操作!

しかし、私はそれをそのように見せる方法がわかりません。これまでのところ、「これは違法です」というメッセージしか表示できませんstd::coutが、出力は次のようになります。

これは違法です!あなたの操作は: 6 / 0=-858993460

また、else ステートメントで結果を別の文字列に設定しようとしました。無視するだけです。

これをどのようにコーディングするのでしょうか?

void Simplecalc::setOperation(char oper, int op1, int op2)
{
operation = oper;
number1 = op1;
number2 = op2;
    if(operation == '+')
    {
    answer = number1 + number2;
    type ="addition";
    }
    else if(operation =='-')
    {
        answer = number1 - number2;
        type ="subtraction";
    }
    else if(operation =='*')
    {
        answer = number1 * number2;
        type = "multiplication";
    }
    else if(operation =='/')
    {
        if(number2 != 0)
    {
         answer = number1/number2;
         type = "division";
    }
   else
       {
     cout<<"this is illegal!";

        }


    }

    else if(operation =='%')
    {
        answer = number1%number2;
        type ="modulus";
    }


}

string Simplecalc::getResults()
{

stringstream ss;
    ss <<"Your operation is "<<type<<": "<<number1<<" "<<operation<<" "<<number2<<"="    
    <<answer<<"\n";
results =ss.str();


   return results;
}
4

3 に答える 3

0

'answer'を'0'で初期化する必要があります。回答変数のデフォルト値である-858993460(16進数の0xccccccccに等しい)を取得しています。

于 2013-01-31T07:19:07.750 に答える
0

これは、setOperation()関数の後にgetResult()を呼び出しているために発生しています。これは、操作が違法であっても発生しています。

これにフラグを使ってみませんか。操作が不正な場合は、boolフラグをfalseに設定します。そのフラグを使用して、不正な場合のgetResults()の呼び出しを延期します。

if(flag)
{
    getResults();
}

else{//何もしない}

それがあなたの問題を解決することを願っています

于 2013-01-31T06:57:15.760 に答える
0

私はあなたが過剰に設計していると思います。「操作を設定する」という概念は必要ありません。入力の読み取り、検証の実行、出力の書き込みをすべて 1 つのメソッドで行う必要があります。

于 2013-01-31T07:00:36.993 に答える