2013-10-04 5 views
0

Я полный noob, поэтому, когда я объясняю простые вещи, это не потому, что я отсталый, просто я хочу знать, думаю ли я неправильно или правильно.Хотя я использую как & и |

У меня есть 2 переменных сначала, x1 и y1. Я положил их в while() как этот

while (y1<0 || y1>500 || x1<0 || x1>500) 

Я прочитал это как «, когда один из этих„вещей“истинны, он будет делать функцию, пока.

Так, например, если y1=601, y1>500 верно .., остальные три являются ложными, но это входит в функции, так как только одна потребность, чтобы быть правдой

Теперь вот где я получаю проблемы, я хочу добавить третью переменную z добавить это следующим образом:

while(y1<0 || y1>500 || x1<0 || x1>500 && z>51) 

Я хочу, чтобы это выполнялось только в том случае, если функция z>51 истинна вместе с как минимум еще 1 функцией. Или, если это невозможно, я хочу, чтобы он работал ТОЛЬКО, если верно z>51. Мой код неправильный, потому что сейчас он просто продолжается навсегда, даже если z>51 является ложным.

+1

Это C? Какой язык программирования вы используете? –

+0

Как говорили другие, просто группируйте то, что вы хотите в скобках, независимо от того, группирует ли это «и» или «или». – Rogue

ответ

0

2 проверки являются отдельными.

Вы не можете просто написать y1<0 || 50051 Вы должны написать (y1<0 || y1>50051)

50051 всегда имеет значение true поэтому я предполагаю, что он будет работать вечно

для последнего запроса

while(z1>51 && y1 >0) 
+0

что-то пошло не так, когда я копировал свой код. Не знаю почему, но мне пришлось вручную написать его, и он показывает правильно. – user2779497

+0

Что относительно x1 ?? –

+0

на некоторых языках программирования 50051 не будет проверять тип, поскольку он не является строго логическим (что было бы истинным или ложным) – jev

4

If I правильно поняли свой вопрос:

while((y1<0 || y1>500 || x1<0 || x1>500) && z>51) 

В булевой логике, и (также отметил ^ или .) имеет более высокий приоритет, чем или (также отмечено v или +).

Это означает, что:

y1<0 || y1>500 || x1<0 || x1>500 && z>51

эквивалентно

y1<0 || y1>500 || x1<0 || (x1>500 && z>51)

Таким образом, вам нужно скобку, если это не то, что вы хотите, точно так же как скобка вы добавляете, когда вы используете + и * в математике.

0

В качестве альтернативы вы можете сначала проверить значение z и сохранить цикл без изменений.

if (z > 51) { 
    while ([...]) 
    [...] 
} 

Это немного отличается от решения Maxime, как он предполагает, что значение z не имеет значения, когда вы входите в цикл. Если вы, с другой стороны, хотите обновить z и использовать его как условие для выхода из цикла, сохраните его в состоянии while.

+1

Что делать, если 'z' изменяется в то время? –

Смежные вопросы