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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Петр91
5 / 5 / 1
Регистрация: 17.05.2010
Сообщений: 108
#1

Как называется условие if (!x) {} и как оно работает? - C++

21.04.2014, 12:48. Просмотров 655. Ответов 19
Метки нет (Все метки)

Добрый день, как называется условие if (!x) {} и как работает?
Если x вернет true, то x "выполнится" иначе сработает условие в скобках?
И главный вопрос, как сделать несколько таких условий? if (!x && !y) {} не работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2014, 12:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как называется условие if (!x) {} и как оно работает? (C++):

Как настроить условие, что оно считало двухсимвольную последовательность ff,fl,fi? - C++
Наверняка у меня неправильно ( с=='f' && ++c=='f'). Подскажите, как в условие перейти на другой символ и узнать его значение... #include...

Для чего необходимо распределять память при помощи new и как оно работает - C++
Сижу вот думаю над таким куском кода и не могу понять, как он работает. Допустим мы объявляем структуру: struct nameofctruct { ...

Условие в цикле do while работает не так, как ожидается - C++
Проблема в условие цикла. Вот Код.// ConsoleApplication4.cpp: определяет точку входа для консольного приложения. // #include...

Что значит ":" и как оно работает - C++
Здравствуйте, в данном коде имеется Unit(): health(10) { } и вопрос в том , а что же делает ":" и как им пользоваться. Исользовал раньше...

Натуральное число называется автоморфным, если оно равно последним цифрам своего квадрата. Например, 25 2 = 62 - C++
Натуральное число называется автоморфным, если оно равно последним цифрам своего квадрата. Например, 25 2 = 625. Напишите программу,...

Выделение в динамичесую память как его написать и как оно происходит? Что это я пишу? - C++
Простите, почти ничего не понимаю. for ( int i=6; i>0;i-- ) { unsigned short CshortVar=i; unsigned long ClongVar=i; ...

19
Progers
New to C++
83 / 44 / 5
Регистрация: 14.01.2013
Сообщений: 258
21.04.2014, 12:55 #2
Цитата Сообщение от Петр91 Посмотреть сообщение
как называется условие if (!x) {} и как работает?
Если не X то выполнится то, что в скобках. То есть если X = true то !X это False.
Цитата Сообщение от Петр91 Посмотреть сообщение
И главный вопрос, как сделать несколько таких условий? if (!x && !y) {} не работает.
Я не уверен но попробуйте поставить приоритеты, например попробуйте так
C++
1
if ((!x) && (!y)) {}
0
MayaNash
1285 / 453 / 47
Регистрация: 24.08.2011
Сообщений: 2,214
21.04.2014, 13:06 #3
фактически if (!x) - все равно что if (x == 0)

Добавлено через 27 секунд
а if (x) - все равно что if (x != 0)
0
Петр91
5 / 5 / 1
Регистрация: 17.05.2010
Сообщений: 108
21.04.2014, 15:22  [ТС] #4
то то и оно, что когда пишешь if (!x) {} Выполняется x!!! Пример.
C++ (Qt)
1
2
3
4
5
if (!serial.open(QIODevice::ReadWrite)) {
            processError(tr("Can't open %1, error code %2")
                         .arg(serial.portName()).arg(serial.error()));
            return;
        }
Если не можем открыть порт, выводим ошибку. Иначе выражение "serial.open(QIODevice::ReadWrite)" выполнится!!
0
DrOffset
7321 / 4421 / 1001
Регистрация: 30.01.2014
Сообщений: 7,259
21.04.2014, 15:27 #5
Цитата Сообщение от Петр91 Посмотреть сообщение
Иначе выражение "serial.open(QIODevice::ReadWrite)" выполнится!!
Оно в любом случае выполнится, потому что if проверяет результат выражения. Чтобы получить результат выражения, нужно его выполнить, логично?.
0
Петр91
5 / 5 / 1
Регистрация: 17.05.2010
Сообщений: 108
21.04.2014, 16:44  [ТС] #6
О, ясно! Но как выполнить несколько условий? Методом тыка,
C++ (Qt)
1
if ((!x) && (!y)) {} //не работает
C++ (Qt)
1
if ((!x) || (!y)) {} //работает
Получается в первом условии проверяется почему то X и этим компилятор ограничивается. А во втором проверяет все. Во втором случае, "хотя бы одно" - поэтому ему все проверить надо. Но в первом то, тоже ему надо все проверить...
0
KOPOJI
Модератор
Эксперт HTML/CSSЭксперт PHP
16701 / 6623 / 433
Регистрация: 12.06.2012
Сообщений: 19,879
Завершенные тесты: 1
21.04.2014, 16:50 #7
Оператор И возвращает TRUE только в том случае, если все подвыражения возвращают истину. В целях оптимизации (и следуя здравой логике), если первое подвыражение не выполнилось, то второе проверять не имеет смысла (чем, кстати, довольно часто пользуются)
Оператор ИЛИ действует схожим образом, только наоборот. Если первое подвыражение выполнилось, то второе проверять не имеет смысла.

....Можете использовать "исключающее или" (xor)

Добавлено через 55 секунд
P.S. xor в C++ == "^"
0
MayaNash
1285 / 453 / 47
Регистрация: 24.08.2011
Сообщений: 2,214
21.04.2014, 16:53 #8
а можно
C++
1
2
3
if (!x)
  if (!y)
   ...
0
KOPOJI
Модератор
Эксперт HTML/CSSЭксперт PHP
16701 / 6623 / 433
Регистрация: 12.06.2012
Сообщений: 19,879
Завершенные тесты: 1
21.04.2014, 16:54 #9
Цитата Сообщение от Керра Посмотреть сообщение
if (!x) - все равно что
Не совсем точно.. Например:
C++
1
2
3
4
5
const char c = '\0';
    if(!c)
        std::cout << "OK" << std::endl;
    else
        std::cout << "Fail" << std::endl;
0
Петр91
5 / 5 / 1
Регистрация: 17.05.2010
Сообщений: 108
21.04.2014, 17:10  [ТС] #10
Спасибо царь, за разъяснение!) Все ясно! Только вы меня неправильно поняли, мне как раз таки и нужно x y z выполнить. Это условие как раз таки и подходит.
C++ (Qt)
1
if ((!x) || (!y)) {}
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
21.04.2014, 17:12 #11
Цитата Сообщение от KOPOJI Посмотреть сообщение
C++
1
2
3
const char c = '\0'; 
if(!c) std::cout << "OK" << std::endl; 
else std::cout << "Fail" << std::endl;
и что? и что ужасно противоречивого должно выводиться? Разве не ОК, как и ожидалось?
0
KOPOJI
Модератор
Эксперт HTML/CSSЭксперт PHP
16701 / 6623 / 433
Регистрация: 12.06.2012
Сообщений: 19,879
Завершенные тесты: 1
21.04.2014, 17:18 #12
Цитата Сообщение от Петр91 Посмотреть сообщение
Только вы меня неправильно поняли, мне как раз таки и нужно x y z выполнить
как раз я правильно понял, вы меня не поняли
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
 
bool a() {
    std::cout << 'a' << std::endl;
    return true;
}
bool b() {
    std::cout << 'b' << std::endl;
    return false;
}
bool c() {
    std::cout << 'c' << std::endl;
    return false;
}
bool d() {
    std::cout << 'd' << std::endl;
    return true;
}
 
int main(int argc, char *argv[])
{
    if (!a() || !b())
        std::cout << "A or B" << std::endl;
 
    if (!c() || !d())
        std::cout << "C or D" << std::endl;
 
    return 0;
}
'd' вы никогда не увидите, потому что первое условие - !c() уже успешно выполнилось.

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
и что?
да и ничего.

0
MayaNash
1285 / 453 / 47
Регистрация: 24.08.2011
Сообщений: 2,214
21.04.2014, 18:24 #13
я так поняла, что нужно сохранить возвращаемые значения, и потом уже сохраненные значения пихать в if.
0
Петр91
5 / 5 / 1
Регистрация: 17.05.2010
Сообщений: 108
22.04.2014, 02:21  [ТС] #14
Цитата Сообщение от KOPOJI Посмотреть сообщение
Как раз я правильно понял, вы меня не поняли
Под рукой компилятора нет, но
Цитата Сообщение от KOPOJI Посмотреть сообщение
'd' вы никогда не увидите, потому что первое условие - !c() уже успешно выполнилось.
!с() - успешно выполнилось, и это условие выполнится
C++ (Qt)
1
2
if (!c() || !d())
        std::cout << "C or D" << std::endl;
т.е Выведется на экран "C or D". Что нам это дает, что если a ИЛИ b ИЛИ c ИЛИ d вернет false (не выполнится) то получим ошибку. Что собстно и надо.
Хотя логичней было бы проверить все и вывести по каждому ошибку.
0
MayaNash
1285 / 453 / 47
Регистрация: 24.08.2011
Сообщений: 2,214
22.04.2014, 09:36 #15
О чем я и говорю.
C++
1
2
3
bool bx = x(), by = y(), bz = z(); // выполнились все
if (!bx || !by)
  ...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2014, 09:36
Привет! Вот еще темы с ответами:

Как это называется? - C++
С. Прата, листинг 8.1 // использование встроенной функции #include &lt;iostream&gt; inline double square(double x) { return x*x; } //...

Как называется функция - C++
В общем, решил написать змейку. Всё хорошо,вот только проблемка. Чтобы управлять змейкой,нужно вводить значения с клавиатуры, но когда...

Как называется принцип? - C++
Что это за принцип шифрования, может кто рассказать? while ( *s != '\0') // до тех пор пока не встретим завершающий ...

Как называется компонентная функция? - C++
Ребят,помогите пожалуйста напишите как вызывается компонентная функция?буду благодарен


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
22.04.2014, 09:36
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru