Освой самостоятельно С++ за 21 день.
Шрифт:
В данном примере получение истинного результата одним оператором if не избавляет от выполнения проверок другими операторами if.
Использование отступов в программных кодых
Обратите внимание, как в листинге 4.4 используются отступы в конструкции с оператором if. Наверное, фанаты программирования могли бы развязать войну по поводу того, какой стиль выделения программных блоков лучше использовать. И хотя возможны десятки различных стилей, чаще других используются три перечисленных ниже.
• Начальная открывающая скобка располагается после условия,
If (условие) {
выражение
}
• Фигурные скобки располагаются под словом if, выравниваясь по одной линии, а операторы блока записываются с отступом:
if (условие)
{
выражение
}
• Отступ используется как для обеих фигурных скобок, так и для выражений блока:
if (условие)
{
выражение
}
Вариант, используемый в этой книге, отражает лишь пристрастие автора и ни к чему вас не обязывает.
Ключевое слово else
Довольно часто в программах требуется, чтобы при выполнении некоторого условия (т.е. когда это условие возвратит значение true) программа выполняла один блок команд, а при его невыполнении (т.е. когда это условие возвратит значение false) —
другой блок. В листинге 4.4 программист намеревался выводить на экран одно сообщение, если первая проверка (RedSoxScore > Yankees) возвращает значение true, и другое сообщение, если эта проверка возвращает значение false.
Показанный выше способ последовательного использования нескольких операторов if для проверки ряда условий прекрасно работает, но слишком громоздкий. Улучшить читабельность программы в подобных случаях можно с помощью ключевого слова else (листинг 4.6):
if (условие)
выражение;
else
выражение;
Листинг 4.6. Пример использования ключевого слова else
1: // Листинг 4.6. Пример конструкции с ключевыми
2: // словами if и else
3: #include <iostream.h>
4: int main
5: {
6: int firstNumber, secondNumber;
7: cout << "Please enter a big number: ";
8: cin >> firstNumber;
9: cout << "\nPlease enter a smaller number: ";
10: cin >> secondNumber;
11: if (firstNumber > secondNumber)
12: cout << "\nThanks!\n";
13: else
14: cout << "\nOops. The second is bigger!";
15:
16: return 0;
17: }
Результат:
Please enter a big number: 10
Please enter a smaller number: 12
Oops. The second is bigger!
Анализ: В строке 11 проверяется условие, заданное в операторе if. Если это условие истинно, будет выполнена строка 12, после чего работа программы завершится в строке 16. Если же это условие возвратит false, программа продолжит работу со строки 14. Если в строке 13 удалить ключевое слово else, строка 14 будет выполнена в любом случае, вне зависимости от выполнения условия. Но в данной конструкции if-else будет выполняться либо блок после if, либо блок после else.
Помните, что в конструкции if-else можно использовать
Сложные конструкции с if
Нет никаких ограничений на использование любых операторов в блоках выражений в конструкции if-else, в том числе на использование дополнительных операторов if и else. В этом случае будет получена вложенная конструкция из нескольких операторов if:
Ниже приводится синтаксис оператора if.
Форма 1:
if (условие)
выражение;
следующее выражение;
Если условие возвращает true, то выполняется выражение, а за ним и следующее выражение. Если условие возвратит false, то выражение игнорируется, а программа переходит к выполнению следующего выражения.
Помните, что вместо выражения может использоваться целый блок, заключенный в фигурные скобки.
Форма 2:
if (условие)
выражение1;
else
выражение2;
следующее выражение;
Если условие возвращает значение true, выполняется выражение1, в противном случае выполняется выражение2. После этого выполняется следующее выражение.
Пример:
if (SomeValue < 10);
cout << "SomeValue is less than 10";
else
cout << "SomeValue is not less than 10!";
cout << "Done." << endl;
if (условие1)
{
if (условие2)
выражение1;
else
{
if (условиеЗ) выражение2;
else
выражениеЗ;
}
}
else
выражение4;
Смысл этой конструкции из нескольких операторов if можно расшифровать так: если условие1 истинно и условие2 истинно, выполните выражение1. Если условие1 истинно, а условие2 — нет, тогда проверьте условиеЗ и, если оно истинно, выполните выражение2. Если условие1 истинно, а условие2 и условиеЗ — нет, тогда выполните выражениеЗ. Наконец, если условие1 ложно, выполните выражение4. Да, вложенные операторы if могут кого угодно запутать!
Пример использования такой сложной конструкции с несколькими операторами if показан в листинге 4.7.
Листинг 4.7. Сложные конструкции с вложенными операторами if
1: // Листинг 4.7. Пример сложной конструкции с
2: // вложенными операторами if
3: #include <iostream.h>
4: int main
5: {
6: // Запрашиваем два числа
7: // Присваиваем числа переменным bigNumber и littleNumber
8: // Если значение bigNumber больше значения littleNumber,
9: // проверяем, делится ли большее число на меньшее без остатка
10: // Если да, проверяем, не равны ли они друг другу
11:
12: int firstNumber, secondNumber;
13: cout << "Enter two numbers.\nFirst: ";
14: cin >> firstNumber;
15: cout << "\nSecond: ";
16: cin >> secondNumber;
17: cout << "\n\n";
18:
19: if (firstNumber >= secondNumber)
20: {
21: if ( (firstNumber % secondNumber) == 0) // evenly divisible?