“Не равно” в связке с логическим “или”

87
14 февраля 2018, 11:54

Дан одномерный массив типа char a[i], где i - номер элемента. Необходимо, чтобы был осуществлен выход из цикла while:

while (!(a[i] == 48) || !(a[i] == 49))
      i++;
while (a[i] != 48) || a[i] != 49)) 
      i++;

Пытался так пробовать - не работает. То бишь, когда код символа равен 48 или 49 должен произойти выход из цикла, а этого не происходит. Что не так?

Answer 1

Условие "когда x равно 48 или 49" (или, более математично, "когда x равно 48 или когда x равно 49") выглядит так:

(x == 48) || (x == 49)

Можно и без скобок, но я оставил для наглядности.

Значит, продолжать цикл, если условие НЕ выполнено, т.е.

while(!((x == 48) || (x == 49)))

Если применить НЕ к А ИЛИ Б, то это - НЕ А И НЕ Б - т.е. второй вариант

while(!(x == 48) && !(x == 49))

или, что то же самое

while((x != 48) && (x != 49))

Т.е. работать, пока код - и не 48, и не 49...

Думаю, проблем подставить вместо x - a[i] проблемы не составит?

Answer 2

while (!(a[i] == 48) || !(a[i] == 49)) означает, что если один из двух условий верно, то продолжить цикл. Как не крути, то элемент не может быть равен одновременно и 48 и 49, поэтому одно из двух условий всегда верно, и цикл продолжается.

while (a[i] != 48) || a[i] != 49)) , если тут скобки поставить правильно и написать

while ((a[i] != 48) || (a[i] != 49)), то это тоже самое, что и первый вариант. Правильный ответ уже изложил вам Harry.

READ ALSO
Как передать в explicit конструктор параметры?

Как передать в explicit конструктор параметры?

В конструктор класса QPushButton можно передать строкуЕсли я напишу так, то всё будет хорошо: QPushButton *button = new QPushButton("text"), но я не хочу создавать указатель,...

22
Подключение джойстика в Qt

Подключение джойстика в Qt

Подключаю функционал джойстрика как описано в документации по Qt: http://docqt

50
обработка массива в функции

обработка массива в функции

как все таки верно передать массив в функцию написано типа так: func(int a, int b, int w[], int i) где i это размер массива, но так не работает почему тоу меня...

61
ошибка компиляции Opencl gcc

ошибка компиляции Opencl gcc

cl_image_desc desc; просит заменить на cl_image_info desc;

85