多个'if'语句,不带'else'

时间:2018-10-01 13:14:04

标签: c++ if-statement

我必须编写的代码基本上是一个小型银行。它要求初始金额,操作类型以及该操作的第二个运算符。

我不允许使用else,但可以使用if语句(我不明白为什么),也不允许使用循环或数组。

这是我到目前为止的代码:

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

int operand1;
int operand2;
float output;
char action;

int main()
{
   cout << fixed << showpoint << setprecision(2);

   cout << "Enter the initial balance [1-1000]: " << endl;
   cin >> operand1;

   cout << "Enter an action (D, W, I or C):" << endl;
   cin >> action;

   cout << "Enter the second operand:" << endl;
   cin >> operand2;

   if ((action != 'D' && action != 'W' && action != 'I' && action != 'C') || (operand1 > 1000 || operand1 < 1) || 
       (action == 'I' && operand2 > 15 || operand2 < 1) || (action == 'C' && operand2 != 20 && operand2 != 10 && operand2 != 5) ||
       (operand2 > 1000 || operand2 < 1))
   {
       cout << "Input out of range" << endl;
       return 0;
   }

   if (action == 'D')
   {
      output = (operand1 + operand2);
      cout << "The new account balance is " << output << endl;
   }

   if (action == 'W')
   {
      output = (operand1 - operand2);
      if (output<0)
      {
          cout << "Input out of range" << endl;
          return 0;
      }
       cout << "The new account balance is " << output << endl;
   }

   if (action == 'I')
   {

       output = ((float)operand1 + (((float)operand2 / 100) * (float)operand1));
       cout << "The new account balance is " << output << endl;
   }

   if (action == 'C')
   {
       output = operand1 % operand2;
       cout << operand1 / operand2 << " bills dispensed plus " << output << endl;
   }

    cin.get();
    cin.get();
    return 0;
}

在某些情况下,我会收到多个错误,而不仅仅是一个错误。例如:

Enter the initial balance [1-1000]: 1030

Enter an action (D, W, I or C): D

Enter the second operand: 40

Input out of range 

但是,当它看到错误时,它似乎只是继续前进,我得到以下输出:

Enter the initial balance [1-1000]:

1030

Input out of range

Enter an action (D, W, I or C):

D

Enter the second operand:

40

The new account balance is 1070.00

我似乎无法弄清楚如何只有一个输出,并且不使用else语句就只能无平衡地显示错误。

3 个答案:

答案 0 :(得分:1)

使用开关(操作):

https://en.cppreference.com/w/cpp/language/switch

案件成立后可以采用默认设置。

很多约定也禁止其他,但不禁止elseif-您确定在您的情况下禁止elseif吗?

但是,即使允许elseif-开关也更易于阅读,并且是一种更优雅的解决方案。

答案 1 :(得分:0)

您可以通过将所有命令视情况不同来使用switch。这是别人已经说过的。

我的贡献是,您可以将第一个if语句放在默认情况下的错误情况下。

在使用switch语句之前,您是否可以检查是否曾经明确声明不能使用'else if'语句。如果没有,您应该使用它。它与“ else”语句不同。

答案 2 :(得分:0)

&&的优先级高于||

if (
    (action != 'D' && action != 'W' && action != 'I' && action != 'C') ||
    (operand1 > 1000 || operand1 < 1) ||
//  (action == 'I' && operand2 > 15 || operand2 < 1) ||
    (action == 'I' && (operand2 > 15 || operand2 < 1)) ||
    (action == 'C' && operand2 != 20 && operand2 != 10 && operand2 != 5) ||
    (operand2 > 1000 || operand2 < 1))
{
    cout << "Input out of range" << endl;
    return 0;
}

要在代码上实现更多可追溯性,值得花点功夫:

if (action != 'D' && action != 'W' && action != 'I' && action != 'C')
{
    cout << "Input out of range; action " << action << endl;
    return 0;
}
if (operand1 > 1000 || operand1 < 1)
{
    cout << "Input out of range; 1st operand: " << operand1 << endl;
    return 0;
}
...