Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Почему не проверяется условие else if - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Application has failed to start because the application configuration is incorrect (+LNK4099, 4098) http://www.cyberforum.ru/cpp-beginners/thread1237164.html
Получил тестовое задание на джуна C++. Проект - Недоделанный арканоид на собственном движке конторы. Моя задача допилить игру. В задании 2 варианта solution'ов: под MS Visual Studio 2008 и под...
C++ Множественное наследование - когда оно действительно нужно? Здравствуйте! До изучения языка C++ я программировал на языках типа Java и C#, где множественное наследование от классов явно запрещено. Долгое время после я обходился без этой возможности. Много... http://www.cyberforum.ru/cpp-beginners/thread1237158.html
C++ Сортировка книг по убыванию года изнания
2) Написать программу сортировки книг в массиве структур по убыванию года издания
Скопировать одну структуру в другую C++
1) Написать программу копирования одной структуры (с информацией о книге) в другую
C++ Получить данные о службах Windows с возможностью управления ими http://www.cyberforum.ru/cpp-beginners/thread1237132.html
Всем привет! я новичок в программировании. Подскажите получить данные о службе, сколько берет оперативной памяти, запущена или нет. И возможность запустить ее или перезагрузить.
C++ Создание VPN сети, RAS API Здравствуйте, я создал небольшой чат, основанный на сокетах. Чтобы клиент подключился к серверу с другого ПК требуется VPN. Хотелось бы попробовать написать клиент для подключения к VPN сети, а еще... подробнее

Показать сообщение отдельно
gru74ik
Модератор
Эксперт CЭксперт С++
4170 / 1818 / 198
Регистрация: 20.02.2013
Сообщений: 4,962
Записей в блоге: 21
01.08.2014, 20:54
Цитата Сообщение от Fobos315 Посмотреть сообщение
мда что то я от паскаля про этот момент забываю
Поэтому пишите так:
C++
1
else if (0==D) // в условии оператора if сравнивается константа 0 со значением переменной D
Если Вы вдруг ошибётесь и по привычке напишете = вместо ==, компилятор выдаст ошибку с номером строки:
C++
1
else if (0=D) // Ошибка! Компилятор заругается: нельзя присвоить константе значение переменной!
Вы сразу поймёте в чём дело.

Более привычный вариант записи, которым воспользовались Вы:
C++
1
else if (D==0) // в условии оператора if сравнивается значение переменной D c константой 0
чреват возможностью допустить ошибку:
C++
1
2
3
else if (D=0)   // В условии оператора if переменной D присваивается значение 0.
                // Таким образом, условие оператора if всегда будет false и
                // программа всегда будет пропускать эту ветку кода.
(что с Вами и произошло).

С точки зрения компилятора такой вариант вполне корректен, но результат выполнения кода совсем не тот, что Вы задумывали. В итоге, в больших программах такую ошибку отловить будет совсем непросто.

Добавлено через 7 часов 53 минуты
Вот та же самая мысль у Стивена Праты в его замечательной книге "Язык программирования С++. Лекции и упражнения" (2013, 6-е издание):
Цитата Сообщение от Стивен Прата
Условные операции и предотвращение ошибок
Многие программисты превращают более интуитивно понятное выражение переменная
== значение
в значение == переменная, чтобы предотвратить ошибки, связанные С
опечатками, когда вместо операции проверки равенства (==) вводится операция
присваивания (=). Например, следующее условие корректно и будет работать правильно:
if (3 == myNumber)
Однако если допустить ошибку и ввести оператор, как показано ниже, то компилятор
выдаст сообщение об ошибке, поскольку расценит это как попытку присвоить значение
литералу (3 всегда равно 3, и ему нельзя присвоить ничего другого):
if (3 = myNumber)
Предположим, что сделана та же опечатка, но используется обычный формат:
if (myNumber =3)
В этом случае компилятор просто присвоит значение 3 переменной myNumber, и блок
внутри if будет выполнен — очень распространенная ошибка, которую трудно обнаружить.
(Однако многие компиляторы будут выдавать предупреждение, на которое разумно
обратить внимание.) В качестве общего правила запомните следующее: написать код, позво-
ляющий компилятору обнаружить ошибку, гораздо легче, чем разбираться с непонятными
мистическими результатами неверного выполнения программ.
7
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru