-1

ステートメントの左側と右側の両方をコンパイラーにチェックさせるにはどうすればよいですか? 私が間違っていなければ、C言語では、&&または||...がある場合は左右の両方を読み取ると思います.両側が真かどうかを確認できるようにする必要があります。

それで:

//Transactions has been initialized to 0

1. if deposit OR withdraw are greater than or equal to 1, add 1 to variable transactions.
2. if deposit AND withdraw are BOTH greater than or equal 1, then add 2 to variable transactions.
3. else if BOTH are less than 1, transaction is 0.

    if (deposit >= 1 || withdraw >=1)
        {
            transactions = transactions + 1;
            cout << "Transactions:  " << transactions << endl;
        }

    else if (deposit >= 1 && withdraw >=1)
        {
           transactions = transactions + 2;
           cout << "Transactions:  " << transactions << endl;
        }
    else
        {
            cout <<"Transactions: " << transactions << endl;
        }

私が抱えているこの問題は、左側のみを読み取るため、トランザクションは 1 のみを返すことです。

お時間をいただきありがとうございます!

編集

https://ideone.com/S66lXi (account.cpp)

https://ideone.com/NtwW85 (main.cpp)

4

4 に答える 4

4

あなたは C について正しくありません。||「論理和」演算子は、片側が真になるとすぐに終了し、左から右への評価を開始します。

ただし、ここでは関係ありません。||ド・モルガンの法則を使用して、可能な場合に変換します(not) and

于 2015-02-24T21:03:01.117 に答える
3

if ステートメントを次のように書き換えることができます

if (deposit >= 1 && withdraw >=1)
    {
       transactions = transactions + 2;
       cout << "Transactions:  " << transactions << endl;
    }
else if (deposit >= 1 || withdraw >=1)
    {
        transactions = transactions + 1;
        cout << "Transactions:  " << transactions << endl;
    }

else
    {
        cout <<"Transactions: " << transactions << endl;
    }

もう1つのアプローチは、次の式を使用することです

int condition = ( deposit >= 1 ) + ( withdraw >=1 )

if ( condition == 2 )
    {
       transactions = transactions + 2;
       cout << "Transactions:  " << transactions << endl;
    }
else if ( condition == 1 )
    {
        transactions = transactions + 1;
        cout << "Transactions:  " << transactions << endl;
    }

else
    {
        cout <<"Transactions: " << transactions << endl;
    }

または単に

 int condition = ( deposit >= 1 ) + ( withdraw >=1 )

 transactions = transactions + condition;
 cout << "Transactions:  " << transactions << endl;

または

 int condition = ( deposit >= 1 ) + ( withdraw >=1 )

 transactions += condition;
 cout << "Transactions:  " << transactions << endl;
于 2015-02-24T21:13:22.353 に答える
2

要件 1 && 2 の両方が true と評価される可能性があるため、ネストされた if/else 選択ステートメントをコードから削除する必要があります。残念ながら、上記の vlad の洗練されたコードは要件を正確に満たしていません。要件 1 と 2 の両方が true と評価される可能性があるため、トランザクションは 3 に等しい能力を持つ必要があります。

以下のコードは、指定された要件を正確に満たしています。

if (deposit >=1 || withdraw >=1)
    ++transactions;

if (deposit >=1 && withdraw >=1)
    transactions += 2;

if (deposit < 1 && withdraw < 1)
    transactions = 0;

cout << "transactions: " << transactions;
于 2015-02-24T23:11:00.180 に答える