Чтение онлайн

ЖАНРЫ

Программирование. Принципы и практика использования 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'
.

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

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

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

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

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

ПОПРОБУЙТЕ

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

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

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

'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";

break;

default:

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

break;

Поделиться с друзьями: