Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вложенные циклы и двумерные массивы.docx
Скачиваний:
5
Добавлен:
24.11.2019
Размер:
3.51 Mб
Скачать

Оператор if else

В то время как оператор if позволяет программе принять решение о том, должен ли выполняться определенный оператор или блок, if else позволяет решить, какой из двух операторов или блоков следует выполнить. Это незаменимое средство для программирования альтернативных действий. Оператор C++ if else моделирует простой английский язык, как в предложении “If you have a Captain Cookie card, you get a Cookie Plus Plus, else you just get a Cookie d’Ordinaire” (непереводимая игра слов с применением местных идиоматических выражений — прим. перев.).

Оператор if else имеет следующую общую форму:

if (проверочное-условие) оператор1

else

оператор2

Если проверочное-условие равно true или не ноль, то программа выполняет оператор1 и пропускает оператор2. В противном случае, когда проверочное-усло­вие равно false или ноль, программа выполняет оператор2 и пропускает оператор1. Потому следующий фрагмент кода печатает первое сообщение, если answer равно 1492, и второе — в противном случае:

if (answer == 1492)

cout << "That's right!\n";

else

cout << "You'd better review Chapter 1 again.\n";

Каждый оператор может быть либо отдельным оператором, либо блоком операто­ров, заключенным в фигурные скобки (рис.). Вся конструкция if else трактуется синтаксически как одиночный оператор.

Например, предположим, что вы хотите преобразовать входящий текст, шифруя буквы и оставляя нетронутыми символы новой строки. Это значит, что нужно заста­вить программу выполнять одно действие для символов новой строки и другое — для всех прочих символов. Как показано в листинге ниже, оператор if else позволяет лег­ко решить эту задачу.

// использование оператора if else

#include <iostream>

int main()

{

char ch;

using namespace std;

cout << "Type, and I shall repeat.\n";

cin.get(ch);

while (ch != '.')

{

if (ch == '\n')

cout << ch;

else

cout << ++ch;

cin.get(ch);

}

// попробуйте ch + 1 вместо ++ch

cout << "\nPlease excuse the slight confusion.\n";

getchar();

getchar();

return 0;

}

Обратите внимание, что в одном из комментариев в листинге предлагается заменить ++ch на ch + 1, чтобы увидеть интересный эффект. Можете ли вы предпо­ложить, что произойдет? Если нет, сделайте это и посмотрите, что получится, после чего попробуйте объяснить. (Подсказка: это касается того, как cout обрабатывает разные типы данных.)

Форматирование операторов if else

Имейте в виду, что две альтернативы в операторе if else должны быть одиноч­ными операторами. Если в каждой логической ветви требуется более одного опера­тора, воспользуйтесь фигурными скобками, чтобы организовать их в единый блок. В отличие от других языков, таких как BASIC и FORTRAN, C++ не воспринимает автоматически все, что находится между if и else, как один блок, поэтому необхо­димо с помощью фигурных скобок объединять операторы в блок. Следующий код, например, вызовет ошибку во время компиляции:

if (ch == ' Z')

zorro++; //if заканчивается здесь

cout << "Another Zorro candidate\n";

else // неверно

dull++;

cout << "Not a Zorro candidate\n";

Компилятор рассматривает это как простой оператор if, который заканчивается на zorro++;. Затем идет оператор cout. До этого места все хорошо. Но далее идет то, что воспринимается компилятором как бесхозный else, а потому он считает это синтаксической ошибкой.

Чтобы код делал то, что нужно, следует указать фигурные скобки:

if (ch == ' Z')

{ // блок, выполняемый, если условие истинно

zorro++;

cout << "Another Zorro candidate\n";

}

else

{ // блок, выполняемый, если условие ложно

dull++;

cout << "Not a Zorro candidate\n";

}

Поскольку C++ — язык свободной формы, фигурные скобки можно размещать как вам угодно, до тех пор, пока они ограничивают операторы языка. В предыдущем при­мере демонстрируется один популярный формат. А вот и другой формат:

if (ch == ' Z') {

zorro++;

cout << "Another Zorro candidate\n";

}

else {

dull++;

cout << "Not a Zorro candidate\n";

}

Первая форма подчеркивает блочную структуру операторов, в то время как вто­рая более тесно связывает блоки с ключевыми словами if и else. Любой стиль ясен и согласован, а потому будет служить вам хорошо; однако вы можете столкнуться с руководителем или работодателем, который имеет собственные строгие и специфи­ческие взгляды на эту тему.