
- •Вложенные циклы и двумерные массивы
- •Инициализация двумерного массива
- •Использование двумерного массива
- •Операторы Ветвления
- •Оператор if
- •If (проверочное-условие)
- •Оператор if else
- •Форматирование операторов if else
- •Конструкция if else if else
- •Условные операции и предотвращение ошибок
- •Логические выражения
- •Операция ?:
- •Оператор switch
- •Использование перечислителей в качестве меток
- •Операторы break и continue
Оператор 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. Любой стиль ясен и согласован, а потому будет служить вам хорошо; однако вы можете столкнуться с руководителем или работодателем, который имеет собственные строгие и специфические взгляды на эту тему.