в этом примере крайне важен.
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. Таким образом, в действительности предыдущий фрагмент означает следующее:
Содержание Назад Вперед