0
// H2.cpp : Tihs program runs different mathmatical operations on numbers given by the user

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    int a;
    cout << "Enter a number for a: "; //Prompts the user for a and b inputs
    cin >> a;

    int b;
    cout << "Enter a number for b: ";
    cin >> b;

    cout << "A is " << a << "\tB is " << b << endl;
    cout <<"Sum of a and b is equal to " << a << " + " << b << " and the result is " << (a + b) << endl; //Performs addition operator and gives output
    cout <<"Product of a and b is equal to " << a << " * " << b << " and the result is " << (a * b) << endl;
    cout <<"a > b is " << a << " > " << b << " and the result is " << (a > b) << endl;
    cout <<"a < b is " << a << " > " << b << " and the result is " << (a < b) << endl;
    cout <<"a == b is " << a << " == " << b << " and the result is " << (a == b) << endl; //Performs boolean operator and outputs result
    cout <<"a >= b is " << a << " >= " << b << " and the result is " << (a >= b) << endl;
    cout <<"a <= b is " << a << " <= " << b << " and the result is " << (a <= b) << endl;
    cout <<"a != b is " << a << " != " << b << " and the result is " << (a != b) << endl;
    cout <<"a -= b is " << a << " -= " << b << " and the result is a = " << (a -= b) << endl; //Performs - operator on a - b and makes a equal to the new result
    cout <<"a /= b is " << a << " /= " << b << " and the result is a = " << (a /= b) << endl;
    cout <<"a %= b is " << a << " %= " << b << " and the result is a = " << (a %= b) << endl; //Performs % operator on a % b and makes a equal to the new result. Ripple effect created from previous 2 lines as the value of a changes each time.

return 0;

私が懸念している出力は次のとおりです。

a -= b is -4198672 -= 4198672 and the result is a = -4198672
a /= b is -1 /= 4198672 and the result is a = -1
a %= b is -1 %= 4198672 and the result is a = -1

表示されている a の値は、コード行が実行された後の a の値のようです。それは操作の順序と関係があると確信していますが、それを回避する方法がわかりません。どんな助けでも大歓迎です。

4

2 に答える 2

1

演算子または関数の引数が評価される順序は、C++ では定義されていません。異なる引数の評価に副作用がある場合、これらはコンパイラが適切と判断したときにいつでも発生する可能性があり、同じオブジェクトに複数の変更がある場合、結果は未定義の動作になります。特定の評価順序を強制する場合は、式を複数の個別の式に分割する必要があります。これらは順番に評価されるか、シーケンス ポイントを作成する演算子を挿入できます。ただし、シーケンス ポイントを作成する演算子は、連鎖する出力演算子とうまく連携しません。他の引数の前に最初の引数を強制的に評価する演算子のリストは次のとおりです。

  • オペレーター
  • 論理 && および || オペレーター
  • 条件演算子 ?:

もちろん、これらの演算子のいずれかをオーバーロードすると、通常の関数呼び出しになるため、シーケンス ポイントの導入が停止します。

于 2013-09-20T00:48:16.810 に答える
0

リストしたすべての演算子は、値 true または false を返す比較演算子です。

例外: -=、/=、および %= 演算子

a-=b は実際には a=ab です。

そもそもこれを望んでいたかどうかを確認してください。

ところで: if(a=b) も常に成功するため true を返しますが、意図的にこれを行うとは思いません。

于 2013-09-20T00:47:20.200 に答える