// преобразование дюймов в сантиметры и наоборот
// суффикс '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'
.
Мы должны всегда проверять входные данные программы, поскольку — вольно или невольно — кто-нибудь когда-нибудь введет неверные данные. Программа должна работать разумно, даже если пользователь так не поступает.
Приведем улучшенную версию программы.
// преобразование дюймов в сантиметры и наоборот
// суффикс '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
. Перепишем наш пример в ином виде