Использование нескольких целых чисел с одним операндом в условном выражении C возможно?

Можно ли в C написать что-то подобное? и если да, то как это сделать?

if ( x != 1, 2, 7, 8, 90)

3 ответа

Вы не можете сравнить несколько значений таким образом. Вам необходимо проверить каждый в отдельности в сочетании с соответствующим логическим оператором:

if ((x != 1) && (x != 2) && (x != 7) && (x != 8) && (x != 90)

То, что вы написали, это нечто совершенно другое. Это:

if ( x != 1, 2, 7, 8, 90)

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

Так что выражение сначала оценивает x != 1 что приведет к 0 или 1. Это значение отбрасывается, а значение 2 оценивается. Это значение в свою очередь отбрасывается и оценивается следующее значение (7). Затем 8 оценивается и отбрасывается, затем 90 оценивается, что становится значением всего выражения.

Нет, ты не можешь этого сделать. Вам нужно написать это так:

if (x != 1 && x != 2 && x!= 3)

У оператора запятой есть еще один эффект, я позволю вам его искать:)

Мой ответ парадоксален, но строго верен.

"Можно ли в C написать что-то подобное? и если да, то как это делается?

а) Да, это возможно.

б) Как это сделать? Вот оператор запятой, да, C имеет оператор запятой. Конечное значение - последний элемент, 90 здесь

в) Адам не спрашивай о сравнении

enter code here

Так что это если имеет смысл if(90) Интересно, что это подвыражение x!=1 оценивается, но результат теряется и не влияет на финал

if ( x != 1, 2, 7, 8, 90)
{
  here, true
}
else
{
  not here, false
}

пожалуйста, не голосуйте. Это точно ответ. Адан не спрашивает "как сравнить", но слова выше

Приложение: полностью рабочий код от MSVC. Все, что я говорю, каждый может отлаживать.

#include "stdafx.h"


int main()
{
    int x = 2;
    int k = (x != 1, 2, 7, 8, 90);
    if (x != 1, 2, 7, 8, 90)
    {
        int k1 = 1;
    }
    else
    {
        int k2 = 2;
    }
    return 0;
}
Другие вопросы по тегам