Russian Belarusian English German Japanese Ukrainian

3.15

Оператор 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;

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий


Поиск по сайту