Использование нескольких целых чисел с одним операндом в условном выражении 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;
}