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