Выбрать главу

#include <iostream>

using namespace std;

int main()

{

 int a, b;

 cout << "Введите два числа: ";

 cin >> a >> b;

 if(b) cout << a/b << '\n';

 else cout << "На нуль делить нельзя.\n";

 return 0;

}

Обратите внимание на то, что значение переменной b (делимое) сравнивается с нулем с помощью инструкции if(b), а не инструкции if(b!=0). Дело в том, что, если значение b равно нулю, условное выражение, управляющее инструкцией if, оценивается как ЛОЖЬ, что приводит к выполнению else-ветви. В противном случае (если b содержит ненулевое значение) условие оценивается как ИСТИНА, и деление благополучно выполняется. Нет никакой необходимости использовать следующую if-инструкцию, которая к тому же не свидетельствует о хорошем стиле программирования на C++.

if(b != 0) cout << а/b << '\n';

Эта форма if-инструкции считается устаревшей и потенциально неэффективной.

Вложенные if-инструкции

Вложенные if-инструкции образуются в том случае, если в качестве элемента инструкция (см. полный формат записи) используется другая if-инструкция. Вложенные if-инструкции очень популярны в программировании. Главное здесь — помнить, что else-инструкция всегда относится к ближайшей if-инструкции, которая находится внутри того же программного блока, но еще не связана ни с какой другой else-инструкцией. Вот пример.

if(i) {

 if(j) statement1;

 if(k) statement2; // Эта if-инструкция

 else statement3; // связана с этой else-инструкцией.

}

else statement4; // Эта else-инструкция связана с if(i).

Как утверждается в комментариях, последняя else-инструкция не связана с инструкцией if(j), поскольку они не находятся в одном блоке (несмотря на то, что эта if-инструкция — ближайшая, которая не имеет при себе "else-пары"). Внутренняя else-инструкция связана с инструкцией if(k), поскольку она — ближайшая и находится внутри того же блока.

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

Язык C++ позволяет 256 уровней вложения, но на практике редко приходится вкладывать if-инструкции на "такую глубину". продемонстрируем использование вложенных инструкций с помощью очередного усовершенствования программы "Угадай магическое число" (здесь игрок получает реакцию программы на неправильный ответ).

// Программа "Угадай магическое число":

// 2-е усовершенствование.

#include <iostream>

#include <cstdlib>

using namespace std;

int main()

{

 int magic; // магическое число

 int guess; // вариант пользователя

 magic = rand(); // Получаем случайное число.

 cout << "Введите свой вариант магического числа: ";

  cin >> guess;

 if(guess == magic) {

  cout << " ** Правильно **\n";

  cout << magic << " и есть то самое магическое число.\n";

 }

 else {

  cout << "...Очень жаль, но вы ошиблись.";

  if(guess > magic) cout <<"Ваш вариант превышает магическое число.\n";

  else cout << " Ваш вариант меньше магического числа.\n";

 }

 return 0;

}

Конструкция if-else-if

Очень распространенной в программировании конструкцией, в основе которой лежит вложенная if-инструкция, является "лестница" if-else-if. Ее можно представить в следующем виде.

if(условие)

 инструкция;

else if(условие)

 инструкция;

else if(условие)

 инструкция;

.

.

.

else

 инструкция;