Язык программирования C++. Вводный курс


Инструкция if - часть 2


if ( minVal > ivec[ i ] )

{

    minVal = ivec[ i ];

    occurs = 1;

}

Вторая инструкция if

выглядит так:

if ( minVal == ivec [ i ] )

    ++occurs;

Заметим, что порядок следования инструкций в этом примере крайне важен. Если мы будем сравнивать minVal

именно в такой последовательности, наша функция всегда будет ошибаться на 1:

if ( minVal > ivec[ i ] ) {

    minVal = ivec[ i ];

    occurs = 1;

}

//         если minVal только что получила новое значение,

//         то occurs будет на единицу больше, чем нужно

if         ( minVal == ivec[ i ] )    

    ++occurs;

Выполнение второго сравнения не обязательно: один и тот же элемент не может одновременно быть и меньше и равен minVal. Поэтому появляется необходимость выбора одного из двух блоков в зависимости от условия, что реализуется инструкцией if-else, второй формой if-инструкции. Ее синтаксис выглядит таким образом:

if ( условие )

    инструкция1

else

    инструкция2

инструкция1

выполняется, если условие истинно, иначе переходим к инструкция2. Например:

if ( minVal == ivec[ i ] )

    ++occurs;

else

if ( minVal > ivec[ i ] ) {

    minVal = ivec[ i ];

    occurs = 1;

}

Здесь инструкция2

сама является if-инструкцией. Если minVal

меньше ivec[i], никаких действий не производится.

В следующем примере выполняется одна из трех инструкций:

if ( minVal < ivec[ i ] )

    {} // пустая инструкция

else

if ( minVal > ivec[ i ] ) {

    minVal = ivec[ i ];

    occurs = 1;

}

else // minVal == ivec[ i ]

    ++occurs;

Составные инструкции if-else

могут служить источником неоднозначного толкования, если частей else

больше, чем частей if. К какому из if

отнести данную часть else? (Эту проблему иногда называют проблемой висячего else). Например:

if ( minVal <= ivec[ i ] )

    if ( minVal == ivec[ i ] )

        ++occurs;

else {

    minVal = ivec[ i ];

    occurs = 1;

}

Судя по отступам, программист предполагает, что else относится к самому первому, внешнему if. Однако в С++ неоднозначность висячих else разрешается соотнесением их с последним встретившимся if. Таким образом, в действительности предыдущий фрагмент означает следующее:




Начало  Назад  Вперед