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

на главную

Жанры

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

Краш-тест для майора

Рам Янка
3. Серьёзные мальчики в форме
Любовные романы:
современные любовные романы
эро литература
6.25
рейтинг книги
Краш-тест для майора

Запределье

Михайлов Дем Алексеевич
6. Мир Вальдиры
Фантастика:
фэнтези
рпг
9.06
рейтинг книги
Запределье

Кодекс Охотника. Книга ХХ

Винокуров Юрий
20. Кодекс Охотника
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга ХХ

Возвышение Меркурия. Книга 8

Кронос Александр
8. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 8

Секси дед или Ищу свою бабулю

Юнина Наталья
Любовные романы:
современные любовные романы
7.33
рейтинг книги
Секси дед или Ищу свою бабулю

Огни Эйнара. Долгожданная

Макушева Магда
1. Эйнар
Любовные романы:
любовно-фантастические романы
эро литература
5.00
рейтинг книги
Огни Эйнара. Долгожданная

Темный Охотник

Розальев Андрей
1. КО: Темный охотник
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Охотник

Мужчина не моей мечты

Ардова Алиса
1. Мужчина не моей мечты
Любовные романы:
любовно-фантастические романы
8.30
рейтинг книги
Мужчина не моей мечты

Как я строил магическую империю 2

Зубов Константин
2. Как я строил магическую империю
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Как я строил магическую империю 2

Внешняя Зона

Жгулёв Пётр Николаевич
8. Real-Rpg
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Внешняя Зона

Идеальный мир для Социопата 5

Сапфир Олег
5. Социопат
Фантастика:
боевая фантастика
рпг
5.50
рейтинг книги
Идеальный мир для Социопата 5

Приручитель женщин-монстров. Том 1

Дорничев Дмитрий
1. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 1