Банальный while
От: black_c0de Германия  
Дата: 26.03.04 07:01
Оценка:
есть много разных факторов, по которым завершается выплнение цикла, как в одном условии правильно все описать?

while(cnt++ < 15 || !dwWaitSuccess || !bConnected || theApp.IsStarted() )
{
}


такое условие будет означать что:

если счетчик cnt больше или равен 15
ИЛИ
dwWaitSuccess == FALSE
ИЛИ
bConnected == TRUE
ИЛИ
theApp.IsStarted == FALSE

то завершить цикл, верно? вопрос простой в принципе но мне почему то кажется что это условие не срабатывает и приходится вставлять в начало цикла дополнительные условия типа этого:

if( bConnected || cnt > 15)
                        break;


сразу же еще вопрос:

как будет вести себя цикл:

while(cnt++ < 15 && !dwWaitSuccess && !bConnected && theApp.IsStarted() )
{
}


ну напутался 8((
// best regardz, black c0de
best regards, black c0de
Re: Банальный while
От: Fox007 Россия http://nalobin.ru
Дата: 26.03.04 07:08
Оценка:
Здравствуйте, black_c0de, Вы писали:

_>то завершить цикл, верно? вопрос простой в принципе но мне почему то кажется что это условие не срабатывает и приходится вставлять в начало цикла дополнительные условия типа этого:


_>
_>if( bConnected || cnt > 15)
_>                        break;
_>

Потому что во время проверки условия в while cnt равно 15,
а в теле while уже 16. Используй ++cnt вместо cnt++.
Re: Банальный while
От: nobody2 Россия  
Дата: 26.03.04 07:09
Оценка:
Здравствуйте, black_c0de, Вы писали:


_>есть много разных факторов, по которым завершается выплнение цикла, как в одном условии правильно все описать?


_>
_>while(cnt++ < 15 || !dwWaitSuccess || !bConnected || theApp.IsStarted() )
_>{
_>}
_>


_>такое условие будет означать что:


_>если счетчик cnt больше или равен 15

_>ИЛИ
_>dwWaitSuccess == FALSE
_>ИЛИ
_>bConnected == TRUE

bConnected == FALSE а не TRUE

_>ИЛИ

_>theApp.IsStarted == FALSE

_>то завершить цикл, верно? вопрос простой в принципе но мне почему то кажется что это условие не срабатывает и приходится вставлять в начало цикла дополнительные условия типа этого:


_>
_>if( bConnected || cnt > 15)
_>                        break;
_>


_>сразу же еще вопрос:


_>как будет вести себя цикл:


_>while(cnt++ < 15 && !dwWaitSuccess && !bConnected && theApp.IsStarted() )

_>{
_>}

цикл будет выполняться пока все выражения == true

а вообще:
!a || !b тождественно равно !(a && b)
Re: Банальный while
От: Bell Россия  
Дата: 26.03.04 07:12
Оценка:
Здравствуйте, black_c0de, Вы писали:


_>есть много разных факторов, по которым завершается выплнение цикла, как в одном условии правильно все описать?


_>
_>while(cnt++ < 15 || !dwWaitSuccess || !bConnected || theApp.IsStarted() )
_>{
_>}
_>


_>такое условие будет означать что:


_>если счетчик cnt больше или равен 15

_>ИЛИ
_>dwWaitSuccess == FALSE
_>ИЛИ
_>bConnected == TRUE
_>ИЛИ
_>theApp.IsStarted == FALSE

_>то завершить цикл, верно?


Неверно. Цикл завершается, если:

cnt >= 15
И
dwWaitSuccess == true
И
bConnected  == true
И
theApp.IsStarted() == false



ИМХО писать такие сложные выражения в условии цикла не есть гут, в чем ты сам уже убедился.
Попробуй лучше так:


while(cnt++ < 15)
{
   //Остальные проверки в виде if/break
}
Любите книгу — источник знаний (с) М.Горький
Re: Банальный while
От: LaptevVV Россия  
Дата: 26.03.04 07:15
Оценка:
Здравствуйте, black_c0de, Вы писали:


_>есть много разных факторов, по которым завершается выплнение цикла, как в одном условии правильно все описать?


_>
_>while(cnt++ < 15 || !dwWaitSuccess || !bConnected || theApp.IsStarted() )
_>{
_>}
_>


_>такое условие будет означать что:


_>если счетчик cnt больше или равен 15

_>ИЛИ
_>dwWaitSuccess == FALSE
_>ИЛИ
_>bConnected == TRUE
_>ИЛИ
_>theApp.IsStarted == FALSE

_>то завершить цикл, верно? вопрос простой в принципе но мне почему то кажется что это условие не срабатывает и приходится вставлять в начало цикла дополнительные условия типа этого:


_>
_>if( bConnected || cnt > 15)
_>                        break;
_>


_>сразу же еще вопрос:


_>как будет вести себя цикл:


_>while(cnt++ < 15 && !dwWaitSuccess && !bConnected && theApp.IsStarted() )

_>{
_>}


_>ну напутался 8((


Да, у меня тож постоянно та же картина — ошибки в сложных условиях.
Первый вариант цикла будет работать, если хотя бы одно условие дает в результате true. Причем, условие вычисляется слева направо до первой истины. Лично я не стал бы в условии ставить cnt++ — от греха подальше.
Второй цикл будет работать, если ВСЕ условия будут истина, причем вычисляется до первого false.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Банальный while
От: vedmalex Россия  
Дата: 26.03.04 07:17
Оценка:
Здравствуйте, black_c0de, Вы писали:
мне кажется вы забыли
в условии поставить скобочки
 while((cnt++ < 15) || !dwWaitSuccess || !bConnected || theApp.IsStarted() )

_>
_>while(cnt++ < 15 || !dwWaitSuccess || !bConnected || theApp.IsStarted() )
_>{
_>}
_>
Re: Банальный while
От: Аноним  
Дата: 26.03.04 07:18
Оценка:
Здравствуйте, black_c0de, Вы писали:
_>если счетчик cnt больше или равен 15
_>ИЛИ
_>dwWaitSuccess == FALSE
_>ИЛИ
_>bConnected == TRUE
_>ИЛИ
_>theApp.IsStarted == FALSE
_>то завершить цикл, верно?
Нет.
while (!(cnt>=15 || dwWaitSuccess == FALSE || bConnected == TRUE || theApp.IsStarted() == FALSE)) {}
// Или
while ( cnt<15 && dwWaitSuccess == TRUE && bConnected == FALSE || theApp.IsStarted() == TRUE ) {}
// Или же
while ( cnt<15 && dwWaitSuccess && !bConnected || theApp.IsStarted() ) {}

_>как будет вести себя цикл:
_>while(cnt++ < 15 && !dwWaitSuccess && !bConnected && theApp.IsStarted() )
_>{
_>}
По-другому
_>ну напутался 8((
Общее правило:
!(x||y) <=> !x && !y

Удачи.
Re[2]: Банальный while
От: vedmalex Россия  
Дата: 26.03.04 07:36
Оценка:
Действительно, можно использовать
 ++cnt
или менять условие
Re[2]: Банальный while
От: black_c0de Германия  
Дата: 26.03.04 09:03
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>
А>while (!(cnt>=15 || dwWaitSuccess == FALSE || bConnected == TRUE || theApp.IsStarted() == FALSE)) {}
А>// Или
А>while ( cnt<15 && dwWaitSuccess == TRUE && bConnected == FALSE || theApp.IsStarted() == TRUE ) {}
А>// Или же
А>while ( cnt<15 && dwWaitSuccess && !bConnected || theApp.IsStarted() ) {}
А>

_>>как будет вести себя цикл:
_>>while(cnt++ < 15 && !dwWaitSuccess && !bConnected && theApp.IsStarted() )
_>>{
_>>}
А>По-другому
_>>ну напутался 8((
А>Общее правило:
А>!(x||y) <=> !x && !y

А>Удачи.
// best regardz, black c0de
best regards, black c0de
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.