Простая конструкция if позволяет нам выбрать, выполнить или нет некоторое действие; конструкция же if-else дает возможность выбрать одно из двух действий.
Подведем итоги.
Оператор 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
; /* точка с запятой здесь обозначает пустой
оператор*/
else оператор2;
Для явного указания намерений программиста можно использовать и фигурные скобки. Например, обе вышеприведенные интерпретации можно записать явно так:
if(e1) {
if(e2)
оператор1;
else
оператор2
}
и
if(e1) {
if(e2) оператор1;
}
else
оператор2;
Операции отношения
Операции отношения используются для сравнений. Мы уже обсуждали их, но здесь мы остановимся на их обсуждении подробнее.
Операция |
смысл |
< |
меньше |
<= |
меньше или равно |
== |
равно |
>= |
больше или равно |
> |
больше |
!= |
не равно |
Этот список хорошо соответствует возможным числовым соотношениям.
! |
Главное предостережение, которое мы хотим сделать, состоит в том, чтобы не использовать знак = вместо ==. С помощью операции присваивания некоторое значение присваивается переменной слева от знака равенства. В то же время с помощью операции отношения "равенство" проверяется: равно ли выражение, стоящее слева от знака, выражению справа от него. Эта операция не изменяет значения переменной в левой части, если она там присутствует. При программировании требуется аккуратность, потому что в ряде случаев компилятор не сможет обнаружить ошибки, связанные с неправильным использованием знаков этих отношений, что приведет к результатам, отличным от тех, которые вы должны были бы получить. |
Операции отношения применяются при формировании условных выражений, используемых в операторах if и while. Указанныеоператоры проверяют, истинно или ложно данное выражение.
Пример:
#include <stdio.h>
main( )
{
int mark;
mark = getchar( );
if(mark == '4')
printf("Оценка 4.\n");
else if (mark > '4')
printf("Оценка больше 4!\n");
else /* случай, когда оценка меньше 4 */
{
mark--;
printf("Теперь оценка на 1 меньше.\n");
}
}
|