Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Петр91
5 / 5 / 1
Регистрация: 17.05.2010
Сообщений: 108
1

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

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

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

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

Для чего необходимо распределять память при помощи new и как оно работает
Сижу вот думаю над таким куском кода и не могу понять, как он работает....

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

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

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

19
Progers
New to C++
83 / 44 / 10
Регистрация: 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
1291 / 460 / 151
Регистрация: 24.08.2011
Сообщений: 2,248
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
9014 / 4861 / 1196
Регистрация: 30.01.2014
Сообщений: 7,942
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
16755 / 6646 / 865
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
21.04.2014, 16:50 7
Оператор И возвращает TRUE только в том случае, если все подвыражения возвращают истину. В целях оптимизации (и следуя здравой логике), если первое подвыражение не выполнилось, то второе проверять не имеет смысла (чем, кстати, довольно часто пользуются)
Оператор ИЛИ действует схожим образом, только наоборот. Если первое подвыражение выполнилось, то второе проверять не имеет смысла.

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

Добавлено через 55 секунд
P.S. xor в C++ == "^"
0
MayaNash
1291 / 460 / 151
Регистрация: 24.08.2011
Сообщений: 2,248
21.04.2014, 16:53 8
а можно
C++
1
2
3
if (!x)
  if (!y)
   ...
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16755 / 6646 / 865
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 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
2421 / 2151 / 525
Регистрация: 25.03.2012
Сообщений: 7,751
Записей в блоге: 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
16755 / 6646 / 865
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 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
1291 / 460 / 151
Регистрация: 24.08.2011
Сообщений: 2,248
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
1291 / 460 / 151
Регистрация: 24.08.2011
Сообщений: 2,248
22.04.2014, 09:36 15
О чем я и говорю.
C++
1
2
3
bool bx = x(), by = y(), bz = z(); // выполнились все
if (!bx || !by)
  ...
0
Петр91
5 / 5 / 1
Регистрация: 17.05.2010
Сообщений: 108
22.04.2014, 10:18  [ТС] 16
Цитата Сообщение от Керра Посмотреть сообщение
О чем я и говорю.
C++ (Qt)
1
2
3
bool bx = x(), by = y(), bz = z(); // выполнились все
if (!bx || !by)
 ...
А смысл делать еще переменные bool? Если у нас что то не выполнится, у нас сработает условие if (!bx || !by) {error}, и в итоге мы получим общую ошибку. Тоже самое можно сделать и без bool. Я полазил в примерах которые идут с QT, в них делают так:
C++ (Qt)
1
2
3
if (!x) { }
if (!y) { }
if (!z) { }
В итоге имеем условие на каждую ошибку.
0
KOPOJI
22.04.2014, 10:30
  #17

Не по теме:

ага.. :D

C++
1
2
3
4
5
6
7
8
9
10
int main(int argc, char *argv[])
{
    switch(true)
    {
        case (1 == 2): std::cout << "1 == 2" << std::endl; break;
        case (1 < 2): std::cout << "1 < 2" << std::endl; break;
    }
 
    return 0;
}

0
c0cu4
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 13
22.04.2014, 11:27 18
Если надо выполнить все три и проверить, что хотя бы один не выполнился, то
C++
1
if (!(x && y && z))
Либо я что-то неправильно понял
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16755 / 6646 / 865
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
22.04.2014, 12:09 19
c0cu4, да не выполнятся они все три, если первый или второй вернет false. Говорил же выше, как работает логическое И.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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;
}
 
int main(int argc, char *argv[])
{
    if (!(a() && b() && c()))
        ;
 
    return 0;
}
Не увидите вы тут "c"
0
c0cu4
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 13
22.04.2014, 12:19 20
Да, туплю.
Ну тогда записать в три числа, перемножить их и проверить, что не 0
0
22.04.2014, 12:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2014, 12:19

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

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

Как это называется?
С. Прата, листинг 8.1 // использование встроенной функции #include &lt;iostream&gt;...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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