Оператор if предназначен для выполнения тех или иных действий в зависимости от истинности или ложности некоторого условия. Условие задается выражением, имеющим результат булева типа. Оператор имеет две формы: if и if...else. Форма if имеет вид:
if (условие) оператор;
Скобки, обрамляющие условие, обязательны.
Условием может быть выражение, преобразуемое в булев тип. Если условие истинно (возвращает true, т.е. ненулевое значение), то указанный в конструкции if оператор выполняется. В противном случае управление сразу передается следующему за конструкцией if оператору. Например, в результате выполнения операторов:
С = А;
if (В > А) С = В;
переменная С станет равна максимальному из чисел А и В, поскольку оператор С = В будет выполнен только при В > А.
Поскольку в С++ арифметическое (целое или действительное) значение может преобразовываться к булеву (любое ненулевое значение воспринимается как true, а нулевое как false), то условие может иметь целый тип. Например:
int а, b, с;
if(а - b/с) ...;
В данном случае условие if(a - b/c) эквивалентно if(a == b/c), поскольку а - b/c возвращает нуль при равенстве а и b/с. Аналогичные условия формально можно записывать и для действительных чисел:
double а, b, с;
if(а - b/с) ...;
Но из-за ошибок округления это может не сработать, даже если теоретически значения а и b/с должны совпадать.
В условных операторах выбора можно сравнивать целые числа и записывать целые выражения. Но никогда не записывайте действительные выражения. Из-за ошибок округления результат их вычисления может не быть равным нулю, даже когда чисто теоретически результат дает нуль.
В условии можно объявлять переменные. Например:
if (int v = func(a)) ...;
В этом случае область действия и существования объявленной переменной только данная структура if, включая ее выполняемый оператор. Форма конструкции if...else имеет вид:
if (условие) оператор1;
else оператор2;
Если условие возвращает true, то выполняется первый из указанных операторов, в противном случае выполняется второй оператор. Обратите внимание, что в конце первого оператора перед ключевым словом else ставится точка с запятой.
Примеры
if(J == 0)
ShowMessage("Деление на нуль");
else Result = I/J;
В качестве и первого, и второго оператора могут, конечно, использоваться и составные операторы:
if(J == 0)
{
ShowMessage("Деление на нуль");
Result = 0;
}
else
Result = I/J;
Опять обратите внимание, что после фигурной скобки перед else точка с запятой не ставится.
При вложенных конструкциях if могут возникнуть неоднозначности в понимании того, к какой из вложенных конструкций if относится элемент else. Компилятор всегда считает, что else относится к последней из конструкций if, в которой не было раздела else.
Например, в конструкции:
if (условие1)
if (условие2)
оператор1;
else оператор2;
else будет отнесено компилятором ко второй конструкции if, т.е. оператор2 будет выполняться в случае, если первое условие истинно, а второе ложно. Иначе говоря, вся конструкция будет прочитана как:
if (условие1)
{
if (условие2) оператор1;
else оператор2;
}
Если же нужно отнести else к первому if, это надо записать в явном виде с помощью фигурных скобок:
if (условие!)
{
if (условие2) оператор1;
}
else оператор2;