Программирование. Принципы и практика использования C++ Исправленное издание
Шрифт:
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;
Поделиться:
Популярные книги
Делегат
6. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Я – Орк. Том 4
4. Я — Орк
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Краш-тест для майора
3. Серьёзные мальчики в форме
Любовные романы:
современные любовные романы
эро литература
6.25
рейтинг книги
Запределье
6. Мир Вальдиры
Фантастика:
фэнтези
рпг
9.06
рейтинг книги
Кодекс Охотника. Книга ХХ
20. Кодекс Охотника
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 8
8. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Секси дед или Ищу свою бабулю
Любовные романы:
современные любовные романы
7.33
рейтинг книги
Огни Эйнара. Долгожданная
1. Эйнар
Любовные романы:
любовно-фантастические романы
эро литература
5.00
рейтинг книги
Темный Охотник
1. КО: Темный охотник
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Мужчина не моей мечты
1. Мужчина не моей мечты
Любовные романы:
любовно-фантастические романы
8.30
рейтинг книги
Как я строил магическую империю 2
2. Как я строил магическую империю
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Внешняя Зона
8. Real-Rpg
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Идеальный мир для Социопата 5
5. Социопат
Фантастика:
боевая фантастика
рпг
5.50
рейтинг книги
Приручитель женщин-монстров. Том 1
1. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00