×
Traktatov.net » Освой самостоятельно С++ за 21 день » Читать онлайн
Страница 44 из 448 Настройки

Пример использования такой сложной конструкции с несколькими операторами 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.

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

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

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

if (x

x = у; // тогда присваиваем x значение у

Однако при создании сложных вложенных конструкций без использования фигурных скобок бывает трудно разобраться, какое выражение какому оператору if принадлежит.

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