Операторы ветвления выбирают в программе из группы альтернатив возможное продолжение вычислительного процесса. Выбор выполняется исходя из значения заданного выражения.
Оператор if имеет следующую общую форму записи:
if (cond_expression)
TRUE_statement
[else
FALSE_statement]
FALSE
TRUE
При выполнении оператора if сначала вычисляется логическое выражение cond_expression. Если результат ИСТИНА (любое отличное от нуля значение), выполняется оператор TRUE_statement. Если результат логического выражения ЛОЖЬ (равен 0), то выполняется оператор FALSE_statement.
Если ключевое слово else отсутствует и результат логического выражения ЛОЖЬ, то в этом случае оператор TRUE_statement пропускается, а управление передается на следующий после if оператор.
Операторы TRUE_statement и FALSE_statement сами могут быть операторами if, образуя так называемые вложенные if. Компилятор интерпретирует вложенные if, сопоставляя каждое из ключевых слов else с последним встретившимся словом if, не имеющим “своего” else. Соответствие ищется в пределах блока, в который заключено слово if. Внутренние и внешние блоки при этом не рассматриваются. Если соответствия для if не найдено, компилятор полагает, что if не имеет ветви else.
Пример 4_1. Использование оператора if.
#include "stdafx.h"
using namespace System;
int main()
{ int a, b;
Console::Write("\nВведите значение b= ");
b = Convert::ToInt32(Console::ReadLine());
if (b > 10)
a = 100;
else
if (b == 10)
a = 10;
else
a = 5;
Console::WriteLine("Значение переменной a = " + a);
Console::ReadLine();
return 0;
}
Результат работы программы (при вводе значения 3) :
Введите значение b= 3<Enter>
Значение переменной a = 5
Результат работы программы (при вводе значения 23) :
Введите значение b= 23 <Enter>
Значение переменной a = 100
Результат работы программы (при вводе значения 10) :
Введите значение b= 10 <Enter>
Значение переменной a = 10
Пример 4_2. Вложенные if:
#include "stdafx.h"
using namespace System;
int main(array<System::String ^> ^args)
{ int a = 1, b = 10;
if (a == 1)
if (b == 1)
Console::WriteLine("\na=1, b = 1 ");
else
Console::WriteLine("\nb не равно 1");
Console::WriteLine("Значение переменной a = " + a);
Console::ReadLine();
return 0;
}
Результат работы программы:
b не равно 1
Значение переменной а = 1
В результате выполнения этой программы на экран будет выводиться строка “a не равно 1”, хотя на самом деле a=1. Ошибка происходит потому, что компилятор сопоставляет if с ближайшим else (то есть со 2-м if). Ошибку можно исправить, поставив фигурные скобки, ограничивающие блок.
Пример 4_3. Исправленная предыдущая программа.
#include "stdafx.h"
using namespace System;
int main()
{
int a = 1, b = 10;
if (a == 1)
{
if (b == 1)
Console::WriteLine("\na=1, b = 1 ");
}
else
Console::WriteLine("\n b не равно 1");
Console::WriteLine("Значение переменной a = " + a);