-1

如何让编译器检查语句的左侧和右侧?如果我没记错的话,我认为在 C 语言中,如果你有的话,它会左右读取&&或者||....所以当我为 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

8

先放&&条件句,再放||条件句else if

由 zenith 提供的解释(如果对您有帮助,请在评论中 +1 他):

最严格的情况需要先处理,因为 if A && Bis true,无论如何A || B都会出现。true因此,如果你把它放在 &&后面||,那么||只要&&情况 发生,情况就会发生true

另外,另一个注意事项:留下cout所有括号的外部,您可以删除else. 无论如何它都会被打印出来,所以不需要输入 3 次。

于 2015-02-24T21:02:27.323 回答
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;
    }

另一种方法是使用以下表达式

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 都可以评估为真,因此您应该将嵌套的 if/else 选择语句从代码中取出。不幸的是,上面 vlad 的优雅代码不能准确地满足要求。由于需求 1 和 2 都可以评估为真,因此交易应该能够等于 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 回答