В этой программе для проверки того, совпадает ли с "магическим числом" вариант, предложенный пользователем, используется оператор отношения "==". При совпадении чисел на экран выводится сообщение ** Правильно **.

Попробуем усовершенствовать нашу программу и в ее новую версию включим else-ветвь для вывода сообщения о том, что предположение пользователя оказалось неверным.

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

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

#include

#include

using namespace std;

int main()

{

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

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

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

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

  cin >> guess;

 if(guess == magic) cout << "** Правильно **";

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

 return 0;

}

Условное выражение

Иногда новичков в C++ сбивает с толку тот факт, что для управления if-инструкцией можно использовать любое действительное С++-выражение. Другими словами, тип выражения необязательно ограничивать операторами отношений и логическими операторами или операндами типа bool. Главное, чтобы результат вычисления условного выражения можно было интерпретировать как значение ИСТИНА или ЛОЖЬ. Как вы помните из предыдущей главы, нуль автоматически преобразуется в false, а все ненулевые значения— в true. Это означает, что любое выражение, которое дает в результате нулевое или ненулевое значение, можно использовать для управления if-инструкцией. Например, следующая программа считывает с клавиатуры два целых числа и отображает частное от деления первого на второе. Чтобы не допустить деления на нуль, в программе используется if-инструкция.

// Деление первого числа на второе.

#include

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

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

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

Все книги серии Изучайте C++ с профессионалами

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