Простейшей формой оператора if является
if(выражение)операторПод выражением здесь понимаем условное выражение. С его помощью сравниваются значения двух величин. Если такое выражение истинно, то оператор выполняется. В противном случае он пропускается. В общем случае в качестве условия может быть использовано любое выражение, и если его значение равно 0, то оно считается ложным.
Оператор может быть простым или составным, т. е. блоком.
Пример:
/* пример одиночного оператора и блока */#include <stdio.h>int main(){ int i; i=getchar(); if (i > 5) /* одиночный оператор*/ printf("Значение больше 5.\n"); if (i < 5) { /* составной оператор*/ printf("Значение\n"); printf(" меньше 5.\n"); } return 0;}Простая форма оператора if позволяет выбрать оператор, возможно, составной, или пропустить его. Язык Си предоставляет также возможность выбрать любой из двух операторов путем использования конструкции if-else.
Напишем программу, заменяющую каждый символ из таблицы ASCII на следующий символ, кроме символа "новая строка".
Пример:
|
|
Общий вид оператора if-else выглядит следующим образом:
if(выражение) операторelse операторЕсли выражение истинно, то выполняется первый оператор, а если ложно, то выполняется оператор, следующий за ключевым словом else. Операторы могут быть простыми или составными.
! | Правила языка Си не требуют отступа в строке, но это стало обычной практикой. Отступ позволяет с первого взгляда заметить те операторы, выполнение которых зависит от проверяемого условия. |
Простая конструкция if позволяет нам выбрать, выполнить или нет некоторое действие; конструкция же if-else дает возможность выбрать одно из двух действий.
Подведем итоги.
Оператор if имеет две формы:
if(выражение) оператор;и
if(выражение) оператор1;else оператор2;Если в результате вычисления значения выражения получено значение " истина " (ненулевое значение), то в обеих формах оператора if выполняется оператор1. Если вычисленное значение выражения равно значению " ложь " (нулевое), тогда выполнение оператора if, представленного в первой форме, заканчивается, а в операторе, имеющем вторую форму, выполняется оператор 2.
Совместное использование обеих форм оператора if приводит к неоднозначности, называемой " проблемой висящего else ".
Например, вложенный оператор if
if(e1) if(e2) оператор1; else оператор2;может быть интерпретирован так
if (e1) if(e2) оператор1; else оператор2;или так
if(e1) if(e2) оператор1;else оператор2;Эта неоднозначность разрешается в языке Си с помощью правила, в соответствии с которым часть else оператора всегда относится к синтаксически самому правому, игнорируя любые отступы, оператору if без части else. Следовательно, первая интерпретация является интерпретацией, принятой в языке Си.
|
|
! | Существует простой способ, позволяющий избавиться от такой неоднозначности: следует избегать одновременного использования обеих форм операторов if в конструкциях с вложенными операторами if. При необходимости можно воспользоваться пустым оператором. Например, вторая интерпретация вышеприведенного оператора if может быть записана как |
Для явного указания намерений программиста можно использовать и фигурные скобки. Например, обе вышеприведенные интерпретации можно записать явно так:
if(e1) { if(e2) оператор1; else оператор2}и
if(e1) { if(e2) оператор1;}else оператор2;