Вход/Регистрация
Программирование. Принципы и практика использования C++ Исправленное издание
вернуться

Страуструп Бьерн

Шрифт:

Что произойдет, когда эта программа начнет выполняться? Компилятор проверит, равно ли значение переменной

x
числу
5
. Если это условие истинно, то будет выполнена следующая инструкция (пустая). Затем программа перейдет к выполнению следующей инструкции, присвоив переменной
y
число
3
. Если же значение переменной
x
не равно
5
, то компилятор не будет выполнять пустую инструкцию (что также не порождает никакого эффекта) и присвоит переменной y число
3
(это не то, чего вы хотели, если значение переменной
x
не равно
5
).

Иначе говоря, эта инструкция

if
присваивает переменной
y
число
3
независимо от значения переменной
x
. Эта ситуация типична для программ, написанных новичкам, причем такие ошибки трудно обнаружить.

Следующий раздел посвящен инструкциям, позволяющим изменить порядок вычислений и выразить более сложные вычисления, чем те, которые сводятся к последовательному выполнению ряда инструкций.

4.4.1. Инструкции выбора

В программах, как и в жизни, мы часто делаем выбор из нескольких альтернатив. В языке С++ для этого используются инструкции

if
и
switch
.

4.4.1.1. Инструкции if

Простейшая форма выбора в языке С++ реализуется с помощью инструкции

if
, позволяющей выбрать одну из двух альтернатив. Рассмотрим пример.

int main

{

int a = 0;

int b = 0;

cout << "Пожалуйста, введите два целых числа \n";

cin >> a >> b;

if (a<b) // условие

// 1-я альтернатива (выбирается, если условие истинно):

cout << "max(" << a << "," << b <<") равно " << b <<"\n";

else

// 2-я альтернатива (выбирается, когда условие ложно):

cout << "max(" << a << "," << b <<") равно " << a << "\n";

}

Инструкция
if
осуществляет выбор из двух альтернатив. Если его условие является истинным, то выполняется первая инструкция; в противном случае выполняется вторая. Это простая конструкция. Она существует в большинстве языков программирования. Фактически большинство основных конструкций в языках программирования представляют собой просто новое обозначение понятий, известных всем еще со школьной скамьи или даже из детского сада. Например, вам, вероятно, говорили в детском саду, что, для того чтобы перейти улицу, вы должны дождаться, пока на светофоре не загорится зеленый свет: “если горит зеленый свет, то можно переходить, а если горит красный свет, то необходимо подождать”. В языке С++ это можно записать как-то так:

if (traffic_light==green) go;

if (traffic_light==red) wait;

Итак, основное понятие является простым, но и это простое понятие можно использовать слишком наивно. Рассмотрим неправильную программу (ошибка в ней заключается не только в отсутствии директивы

#include
).

// преобразование дюймов в сантиметры и наоборот

// суффикс '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'
.

  • Читать дальше
  • 1
  • ...
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: