Вы обнаружите, что многие числа приводят к бессмысленным результатам. Образно говоря, это происходит, когда вы пытаетесь перелить жидкость из четырехлитровой канистры в поллитровую банку. Все перечисленные ниже преобразования выполняются компилятором, несмотря на их опасность.
double
в int
double
в char
double
в bool
int
в char
int
в bool
char
в bool
double x = 2.7;
// какой-то код
int y = x; // значение переменной y становится равным 2
С момента определения переменной y
вы могли забыть, что переменная x
имеет тип double
, или упустить из виду, что преобразование double
в int
приводит к усечению (округлению вниз). Результат вполне предсказуем: семь десятых потеряны. Преобразование int
в char
не порождает проблем с усечением — ни тип int
, ни тип char
невозможно представить в виде дробной части целого числа. Однако переменная типа char
может хранить только очень небольшие целые числа. В персональных компьютерах переменная типа char
занимает 1 байт, в то время как переменная типа int
— 4 байта.
char
без потери информации: значение “сужается”. Рассмотрим пример.
int a = 1000;
char b = a; // переменная b становится равной –24
Не все значения типа int
эквивалентны значению типа char
. Точный диапазон значения типа char
зависит от конкретной реализации. На персональных компьютерах значения типа char
колеблются в диапазоне [–128:127], но мобильность программ можно обеспечить только в диапазоне [0:127], поскольку не каждый компьютер является персональным, и на некоторых из них значения типа char
лежат в диапазоне [0:255].
Итак, что делать, если вы подозреваете, что преобразование может привести к неверным результатам? Перед присваиванием проверьте значение, как это сделано в рассмотренном примере. Более простой способ такой проверки описан в разделах 5.6.4 и 7.4.
Задание
На каждом этапе выполнения задания запустите программу и убедитесь, что она делает именно то, что вы ожидали. Создайте список сделанных ошибок, чтобы предотвратить их в будущем.
1. Напишите программу, формирующую простую форму для письма на основе входной информации. Для начала наберите программу из раздела 3.1, предложив пользователю ввести свое имя и предусмотрев вывод строки “Hello, first_name
”, где first_name
— это имя, введенное пользователем. Затем модифицируйте программу следующим образом: измените приглашение на строку “Введите имя адресата” и измените вывод на строку “Dear first_name
,”. Не забудьте о запятой.
2. Введите одну или две вступительные фразы, например “Как дела? У меня все хорошо. Я скучаю по тебе”. Убедитесь, что первая строка отделена от других. Добавьте еще несколько строк по своему усмотрению — это же ваше письмо.
3. Предложите пользователю ввести имя другого приятеля и сохраните его в переменной friend_name
. Добавьте в ваше письмо следующую строку: “Видел ли ты friend_name
недавно?”.
4. Объявите переменную типа char
с именем friend_sex
и инициализируйте его нулем. Предложите пользователю ввести значение m
, если ваш друг — мужчина, и f
— если женщина. Присвойте переменной friend_sex
введенное значение. Затем с помощью двух инструкций if
запишите следующее. Если друг — мужчина, то напишите строку: “Если ты увидишь friend_name
, пожалуйста, попроси его позвонить мне”. Если друг — женщина, то напишите строку: “Если ты увидишь friend_name
, пожалуйста, попроси ее позвонить мне”.