Литмир - Электронная Библиотека
A
A

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

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

int main()

{

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

                                   // в дюйме

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

                      // сантиметрах

  char unit = 0;

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

  cin >> length >> unit;

  if (unit == 'i')

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

  else

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

}

На самом деле эта программа работает примерно так, как предусмотрено: введите

1i
, и вы получите сообщение
1in==2.54cm
введите
2.54c
, и вы получите сообщение
2.54cm==1in
. Поэкспериментируйте — это полезно.

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

unit=='i'
отличает единицу измерения
'i'
от любых других вариантов. Она никогда не проверяет его для единицы измерения
'c'
.

Что произойдет, если пользователь введет

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

 

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

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

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

// суффикс '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-я альтернатива

 

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

ПОПРОБУЙТЕ

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

4.4.1.2. Инструкции switch

Сравнение единиц измерения с символами

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

48
{"b":"847443","o":1}