if заявления для c ++ - PullRequest
       1

if заявления для c ++

0 голосов
/ 19 января 2011

Моя программа до сих пор, мой вопрос: нужно ли включать операторы if после каждого кода cout / cin или есть способ его обобщить? :

#include <iostream>
using namespace std;

int main ()
{
   double watts, hours_per_day, watt_hours, dollars_per_wh, result;

   dollars_per_wh= .00008;

   cout << " How many Watts for the Air conditioner? ";
   cin >> watts;
   cout << " How many hours/day do you run the Air Conditioner? ";
   cin >> hours_per_day;

   if (watts< 0) 
   {
      cout << "Error- negative watts detected " << endl;
      return 1;
   }

   if (hours_per_day< 0)
   { 
      cout << "Error - negative hours/day detected " << endl;
      return 1;
   }

   cout << "How many Watts for the Television? " ;
   cin >> watts;
   cout << "How many hours/day do you run the Television? " ;
   cin >> hours_per_day;

   if (watts< 0) 
   {
      cout << "Error- negative watts detected " << endl;
      return 1;
   }

   if (hours_per_day< 0)
   { 
      cout << "Error - negative hours/day detected " << endl;
      return 1;
   }

   cout << "How many Watts for the Washer? " ;
   cin >> watts;
   cout << "How many hours/day do you run the Washer? " ;
   cin >> hours_per_day;

   if (watts< 0) 
   {
      cout << "Error- negative watts detected " << endl;
      return 1;
   }

   if (hours_per_day< 0)
   { 
      cout << "Error - negative hours/day detected " << endl;
      return 1;
   }

  return 0 ;
}

Ответы [ 3 ]

2 голосов
/ 19 января 2011

Вы можете написать функцию, которая принимает два параметра:

bool check(int watts, int hours_per_day)
{
    if (watts< 0) 
    {
        cout << "Error- negative watts detected " << endl;
        return false;
    }

   if (hours_per_day< 0)
   { 
        cout << "Error - negative hours/day detected " << endl;
        return false;
   }
}

Тогда в вашей основной функции вы можете заменить два оператора if одним:

if(!check(watts, hours_per_day))
{
    return 1;
}

Если вы хотите сначала собрать все входные данные, а затем оценить их, то, возможно, используйте массив для ватт и hours_per_day. Затем вы можете запустить массив и проверить каждую запись.

1 голос
/ 19 января 2011

Да, вы можете выдвинуть их в отдельную функцию:

void cinNonNegative(double &x)
{
  cin >> x;

  if (x< 0) 
   {
      cout << "Error- negative value detected " << endl;
      exit(1);
   }
}

int main()
{
  ...
  cout << " How many Watts for the Air conditioner? ";
  cinNonNegative(watts);
  cout << " How many hours/day do you run the Air Conditioner? ";
  cinNonNegative(hours_per_day);
  ...
}

И если вы хотите быть более точным в отношении сообщения об ошибке (например, «отрицательные ватты» вместо «отрицательного значения»), вы можете добавить другой параметр в cinNonNegative для имени переменной (например, «ватты»).

0 голосов
/ 19 января 2011

Следующее решение дает вам функцию, которая:

  • Возвращает логическое значение, которое сообщает, если функция прошла успешно / не удалось
  • Позволяет назвать значение, которое следует получить
  • Позволяет установить минимальные и максимальные значения.

При необходимости вы можете создавать другие пользовательские функции для получения целых чисел или другие функции для получения любого другого вида ввода.Таким образом, вы можете сконцентрировать все входные тесты в одном месте.

#include <iostream>
using namespace std;

bool getint(int &result, const char *name, int minValue, int maxValue)
{
    bool success = false;
    int value = 0;
    cout << "Please enter " << name << ": ";
    if (!(cin >> value))
    {
        cout << "Error: bad input detected" << endl;
    }
    else if (value < minValue)
    {
        cout << "Error: " << name << " is less than " << minValue << endl;
    }
    else if (value > maxValue)
    {
        cout << "Error: " << name << " is more than " << maxValue << endl;
    }
    else
    {
        success = true;
        result = value;
    }
    return success;
}


int main()
{
    int watts;
    getint(watts, "Watts for the AC", 0, 10000);

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...