Организовать цикл

Valery_

Пожалуйста помогите организовать цикл:while ((A!+a) && (A!+b)) { далее подряд идут 4 операции } if A=a {....} else {....}Нужно чтобы выход из цикла был как выполнится условие. В данном случае даже если условие выполнено - все равно идет проверка остальных условий до конца цикла
9 ответов

Valery_

несовсем понял что ты хочешь.. но... используй либо цикл do...while() или оператор выхода из цикла break;или ты хочешь в середине цикла иметь возможность выйти? тогда break;


Valery_

Нужно чтобы выход из цикла был как выполнится условие.
while ((A!+a) && (A!+b) && A!=a)
хотя если честно не очень понятна первая часть условия: (A!+a) && (A!+b)


Valery_

ошибся прото в условии while ((A!=a)&&(A!=b)) чтобы не писать длинный код - вот просто упрощение:{ A=A/2; A=A/4; A=A/8; A=A/16; } нужно выйти как только условие будет выполнено. В реальности тут опрас ком порта на разных скоростях. И как только будет получен ответ - надо выйти и его обработать не продолжая дальнейший опрос чтобы сохранились DCB а момент получения ответа так как в зависимости от ответа дальше будут идти еще действия с портом на той же скорости


Valery_

Valery_, тебя не понять. Приведи цикл свой. И напиши условие, при котором должен осуществляться выход.


Valery_

вот цикл
char A[256]; // буффер обмена с портом
char B[3]; - буффер обмена
char a[1]={0xFA} // костанта
char b[1]={0x3D}
 
while (( A[0]!=a[0])&&(A[0]!=b[0])
 
        BuildCommDCB("baud=19200 parity=N data=8 stop=1", &dcbCommPort);
        SetCommState(hComm, &dcbCommPort);
        WriteFile(hComm, B, 3, &BytesWrite, NULL);
        ReadFile(hComm, А, 256, &BytesRead, NULL);
 
        BuildCommDCB("baud=38400 parity=N data=8 stop=1", &dcbCommPort);
        SetCommState(hComm, &dcbCommPort);
        WriteFile(hComm, B, 3, &BytesWrite, NULL);
        ReadFile(hComm, А, 256, &BytesRead, NULL);
 
        BuildCommDCB("baud=57600 parity=N data=8 stop=1", &dcbCommPort);
        SetCommState(hComm, &dcbCommPort);
        WriteFile(hComm, B, 3, &BytesWrite, NULL);
        ReadFile(hComm, А, 256, &BytesRead, NULL);
 
        BuildCommDCB("baud=115200 parity=N data=8 stop=1", &dcbCommPort);
        SetCommState(hComm, &dcbCommPort);
        WriteFile(hComm, B, 3, &BytesWrite, NULL);
        ReadFile(hComm, А, 256, &BytesRead, NULL);
 
}
Далее ибет обработка If A[0]=a[0] {................} else {.......................}нужно выйти из цикла как только будет получен правильный ответ из порта. Не продолжая дальнейшее сканирование.


Valery_

Valery_, у тебя и в коде после while не хватает ) { ?
как только будет получен правильный ответ из порта.
где проверка на правильный ответ из порта?


Valery_

я не копировал код так как он большой. там в реальности еще рассчет контрольой суммы и формирование строки отправки. просто набрал укороченный и в спешке сделал пару ошибок. Но вопрос по выходу их цикла а не по {} ()


Valery_

while (( A[0]!=a[0])&&(A[0]!=b[0]) BuildCommDCB("baud=19200 parity=N data=8 stop=1", &dcbCommPort); SetCommState(hComm, &dcbCommPort); WriteFile(hComm, B, 3, &BytesWrite, NULL); ReadFile(hComm, А, 256, &BytesRead, NULL);// проверкаBuildCommDCB("baud=38400 parity=N data=8 stop=1", &dcbCommPort); SetCommState(hComm, &dcbCommPort); WriteFile(hComm, B, 3, &BytesWrite, NULL); ReadFile(hComm, А, 256, &BytesRead, NULL);// проверкаBuildCommDCB("baud=57600 parity=N data=8 stop=1", &dcbCommPort); SetCommState(hComm, &dcbCommPort); WriteFile(hComm, B, 3, &BytesWrite, NULL); ReadFile(hComm, А, 256, &BytesRead, NULL);// проверкаBuildCommDCB("baud=115200 parity=N data=8 stop=1", &dcbCommPort); SetCommState(hComm, &dcbCommPort); WriteFile(hComm, B, 3, &BytesWrite, NULL); ReadFile(hComm, А, 256, &BytesRead, NULL); }
я правильно проверки раставил?
Но вопрос по выходу их цикла
и ответ был дан:
оператор выхода из цикла break;
просто можешь вставить в любом месте цикла
if (/* некое условие по которому нужно выйти из цикла */) break;


Valery_

спасибо заработало