Читаем Освой самостоятельно С++ за 21 день. полностью

Показанный выше способ последовательного использования нескольких операторов if для проверки ряда условий прекрасно работает, но слишком громоздкий. Улучшить читабельность программы в подобных случаях можно с помощью ключевого слова else (листинг 4.6):

if (условие)

   выражение;

else

   выражение;

Листинг 4.6. Пример использования ключевого слова else

1: // Листинг 4.6. Пример конструкции с ключевыми

2: // словами if и else

3: #include

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 можно использовать не только отдельные выражения, но и целые блоки выражений, заключенных в фигурные скобки.

Оператор

<p>Сложные конструкции с if</p>

Нет никаких ограничений на использование любых операторов в блоках выражений в конструкции if-else, в том числе на использование дополнительных операторов if и else. В этом случае будет получена вложенная конструкция из нескольких операторов if:

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

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?

22:     {

23:       if (firstNumber == secondNumber)

24:         cout << "They are the same!\n";

25:       else

26:         cout << "They are evenly divisible!\n";

27: }

28: else

29:       cout << "They are not evenly divisible!\n";

30:   }

31:   else

32:     cout << "Hey! The second one is larger!\n";

33:   return 0;

34: }

Результат:

Eriter two numbers.

First: 10

Second: 2

They are evenly divisible!

Анализ: Сначала пользователю предлагается ввести два числа (по очереди), затем эти числа сравниваются. С помощью первого оператора if (в строке 19) мы хотим убедиться в том, что первое число больше или равно второму. Если мы убеждаемся в обратном, то выполняется выражение после оператора else, представленного в строке 31.

Если первое сравнение возвращает true, то выполняется блок инструкций, начинающийся в строке 20, где с помощью второго оператора if в строке 21 проверяется предположение, что первое число делится на второе без остатка (т.е. с остатком, равным нулю). Если это предположение подтверждается, то первое число либо кратно второму, либо они вообще равны друг другу. Оператор if в строке 23 проверяет версию о равенстве чисел, а затем на экран выводится сообщение, уведомляющее о выявленном соотношении.

Если оператор if в строке 21 возвращает значение false, то выполняется оператор else в строке 28.

<p>Использование фигурных скобок для вложенных операторов if</p>

Фигурные скобки можно не использовать в конструкциях с оператором if, если эта конструкция состоит только из одного выполняемого выражения. Это справедливо и в случае вложения нескольких операторов if, как показано ниже:

if (x>у) // если x больше у

Перейти на страницу:

Похожие книги

Сущность технологии СОМ. Библиотека программиста
Сущность технологии СОМ. Библиотека программиста

В этой книге СОМ исследуется с точки зрения разработчика C++. Написанная ведущим специалистом по модели компонентных объектов СОМ, она раскрывает сущность СОМ, помогая разработчикам правильно понять не только методы модели программирования СОМ, но и ее основу. Понимание мотивов создания СОМ и ее аспектов, касающихся распределенных систем, чрезвычайно важно для тех разработчиков, которые желают пойти дальше простейших приложений СОМ и стать по-настоящему эффективными СОМ-программистами. Показывая, почему СОМ для распределенных систем (Distributed СОМ) работает именно так, а не иначе, Дон Бокс дает вам возможность применять эту модель творчески и эффективно для ежедневных задач программирования.

Дональд Бокс

Программирование, программы, базы данных / Программирование / Книги по IT