Читаем Программирование полностью

Проблема заключается в том, что вы не можете предотвратить ввод неверной информации. Программа предполагает, что пользователь всегда вводит правильные данные. Условие unit=='i' отличает единицу измерения 'i' от любых других вариантов. Она никогда не проверяет его для единицы измерения 'c'.

Что произойдет, если пользователь введет 15f (футов) “просто, чтобы посмотреть, что будет”? Условие (unit=='i') станет ложным, и программа выполнит часть инструкции else (вторую альтернативу), преобразовывая сантиметры в дюймы. Вероятно, это не то, чего вы хотели, вводя символ 'f'.

  Мы должны всегда проверять входные данные программы, поскольку — вольно или невольно — кто-нибудь когда-нибудь введет неверные данные. Программа должна работать разумно, даже если пользователь так не поступает.

Приведем улучшенную версию программы.

// преобразование дюймов в сантиметры и наоборот

// суффикс 'i' или 'c' означает единицу измерения на входе

// любой другой суффикс считается ошибкой

int main()

{

  const double cm_per_inch = 2.54; // количество сантиметров

                                   // в дюйме

  double length = 1;               // длина в дюймах или сантиметрах

  char unit = ' ';                 // пробел - не единица измерения

  cout<< "Пожалуйста, введите длину и единицу измерения (c или i):\n";

  cin >> length >> unit;

  if (unit == 'i')

    cout << length << "in == " << cm_per_inch*length << "cm\n";

  else if (unit == 'c')

    cout << length << "cm == " << length/cm_per_inch << "in\n";

  else

    cout << "Извините, я не знаю, что такое '" << unit << "'\n";

}

Сначала мы проверяем условие unit=='i', а затем условие unit=='c'. Если ни одно из этих условий не выполняется, выводится сообщение "Извините, ...". Это выглядит так, будто вы использовали инструкцию "else-if", но такой инструкции в языке С++ нет. Вместо этого мы использовали комбинацию двух инструкций if. Общий вид инструкции if выглядит так:

if (выражение) инструкция else инструкция

Иначе говоря, за ключевым словом if следует выражение в скобках, а за ним — инструкция, ключевое слово else и следующая инструкция. Вот как можно использовать инструкцию if в части else инструкции if:

if (выражение) инструкция else if (выражение) инструкция else инструкция

В нашей программе этот примем использован так:

if (unit == 'i')

  ... // 1-я альтернатива

else if (unit == 'c')

  ... // 2-я альтернатива

else

  ... // 3-я альтернатива

  Таким образом, мы можем записать сколь угодно сложную проверку и связать инструкцию с отдельной альтернативой. Однако следует помнить, что программа должна быть простой, а не сложной. Не стоит демонстрировать свою изобретательность, создавая слишком сложные программы. Лучше докажите свою компетентность, написав самую простую программу, решающую поставленную задачу.

ПОПРОБУЙТЕ

Используя приведенный выше пример, напишите программу для перевода йен, евро и фунтов стерлингов в доллары. Если вы любите реальные данные, уточните обменные курсы в веб.

<p id="AutBody_Root048"><strong>4.4.1.2. Инструкции switch</strong></p>

Сравнение единиц измерения с символами 'i' и 'c' представляет собой наиболее распространенную форму выбора: выбор, основанный на сравнении значения с несколькими константами. Такой выбор настолько часто встречается на практике, что в языке C++ для него предусмотрена отдельная инструкция: switch. Перепишем наш пример в ином виде

int main()

{

  const double cm_per_inch = 2.54; // количество сантиметров

                                   // в дюйме

  double length = 1; // длина в дюймах или сантиметрах

  char unit = 'a';

  cout<< "Пожалуйста, введите длину и единицу измерения (c или i):\n";

  cin >> length >> unit;

  switch (unit) {

  case 'i':

    cout << length << " in == " << cm_per_inch*length << " cm\n";

    break;

  case 'c':

    cout << length << " cm == " << length/cm_per_inch << " in\n";

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных