Условный оператор if и операция ?:

Сайт не является учебником по программированию. Это только небольшой авторский сборник информации в помощь начинающим программистам.

Очень часто в программах ставят некоторые условия, согласно которым определяется поведение программы во время выполнения этой программы. Элементарный пример: сравнение чисел и вывод на экран большего, меньшего или равного из них. Но не одним сравнением чисел определяются факторы для поведения программы.

Говоря по-русски, вам постоянно придется инструктировать программу: "Если тут так, то делай это, если по другому, то делай то".

Для такого инструктирования и существует условный оператор if

Эта запись не должна вызывать затруднений, так как легко читается по русски. Но

  • если после проверки условия требуется выполнение более двух действий, то эти действия нужно записать в фигурных скобках

Кроме уже сказанного, можно добавить, что конструкция if … else — это конструкция ветвления разных условий, и этих самых условий может быть разное количество.

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

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

Или вот так

  • Проблема висячего else

Посмотрите на код и на то, что он выведет на экран

Смысл этого кода таков, что написавший его программист решил убедиться в том, что условия выполняются так, как он ждёт. В данном случае программист мог ожидать, что из-за того, что y==3, но y<10, выполнится первое условие, так как условие 3 < 10 == false. Но несмотря на то, что 3<10, сработало второе условие. Это выглядит немного необычно. Здесь проявляется так называемая проблема: "Проблема висячего else" Это не косяк компилятора, это нехватка знаний у программиста. Компилятор видит этот код так:

Здесь становится понятнее, почему работает именно так. Сначала идет проверка меньше ли x, чем 10, в зависимости от результата проверки или выполняется вложенная проверка, или не происходит ничего. Это встречаемая ошибка у новичков. Поэтому им часто пишут о том, что надо использовать фигурные скобки. Сейчас можно увидеть, что если программист действительно ожидал, что выполнится второе условие, то тогда он должен был написать таким образом:

Поэтому нежелательно лениться в прописывании фигурных скобок, написание которых способствует удобочитаемости и может предотвратить подобные ситуации в своих зародышах.

Может у кого-то DosBox, как и у меня. У меня в DosBox C++ 3.1 знак вопроса — это девятка в русской раскладке. Переключение раскладок правым ctrl.
=============================================
Вот есть такой интересный момент, с которым вы можете столкнутся в будущем

Результат? ))))))

Исправить так:

Это такой рабочий костыль и это лучше чем ничего))
 
Еще имеет смысл знать важный момент. Иногда новички пытаются проверить следующим образом лежит ли какое-то значение меж двух

Такой способ неверен. Этот код выполняется как:
if (a<b)<c;

а пошагово это:
if (a<b) //если a<b, то true, иначе false (пусть сейчас получилось true)
if (true<c) //если true<c, то true, иначе false
т. е. после самого первого сравнения сравнение идет не с числами, а с булевыми переменными. Если увидите это в чужой программе, стоит насторожиться, возможно, это ошибка. Правильно выполнять такую проверку так

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

7 комментариев: Условный оператор if и операция ?:

  • сер говорит:

    а эту строчку случайо мы не забыли?
    using namespace std;

    Автор сайта отвечает:
    Не. в С++ 3.1 Пространства имен нет. Для других компиляторов действительно нужно

  • Владимир говорит:

    А как переключить язык:
    else cout<<"РАВНЫЕ ЗНАЧЕНИЯ"; //Если оба условия не выполнены, то пишем что равны

    "Равные значение" — язык не переключается?

    Автор сайта отвечает:
    в Borland C++ 3.1 переключить язык — это правый ctrl,а знак вопроса shift + 9 при русской раскладке (у меня так)

  • Владимир говорит:

    Извините, но не получается переключить язык.

  • Андрей говорит:

    В С++ па и в С тоже среда программирования ненужна!
    Можно просто программу в Блокноте(Если имеется в виду не ооп(Объектность-Орьентированое Программирование) писать А потом менять расширение(Для компиляторов) 😉 😎

    Автор сайта отвечает:
    Среда программирования нужна в особенности начинающим программистам. В блокноте труднее искать ошибки, чем с помощью отладчика среды.
    В блокноте и фотографию Моно Лизы написать можно, а потом открыть ее с помощью программы просмотра изображений.

    Написать ООП программу в блокноте точно так же как и написать не ООП программу

  • Аноним говорит:

    Paydyot vse otlichno

  • Светослав говорит:

    что бы переключить раскладку используй setlocale (0,»»);

  • Катя говорит:

    подскажите, пожалуйста, а что делать если мне нужно работать не с цифрами, а с "да", "нет", введенными с клавиатуры? Как сделать так чтобы с++ распознавал русские да, нет?

    Автор сайта отвечает:

    Катя говорит:
    Спасибо, я попробовала, ошибок не выдает, но, когда в консоли пишешь "да", выдает ответ для "нет". Возможно я все таки не правильно ваш код вписала? (Visual Studio)

    Автор сайта отвечает:
    Все правильно, я поcмотрел в VS2013

    Вывело как должно.

    еще в 2010 студии посмотрел, тоже работает корректно.

    Катя говорит:
    спасибо БОЛЬШОЕ!

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

Ваш e-mail не будет опубликован.

Поиск

 
     

Яндекс.Метрика

НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Солидной компании на постоянную работу требуется девушка приятной внешности со знанием Linux, программирование встраиваемых микроконтроллеров на C/C++/ASM, знание Linux - установка и настройка (сеть, графика, установка драйверов); C , Python, технологии ООП, GTK (желательно PyGTK) или Qt, SQL и XML - базовые знания; понимание многопоточности и синхронизации потоков.

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок