Salve,
prendendo come esempio questo codice:
come faccio ad uscire con una break anche da A??codice:while() // A { while() // B { break; } }
grazie
Salve,
prendendo come esempio questo codice:
come faccio ad uscire con una break anche da A??codice:while() // A { while() // B { break; } }
grazie
Alla batteria dai retta ballA
... ma mi sembra troppo ovvio ...codice:while() // A { while() // B { break; } break; }
No MP tecnici (non rispondo nemmeno!), usa il forum.
infatti...troppo ovvio. devo uscire da A e B ma non con una break in A!
lo so che non dovre fare il paragone..ma in Perl avrei fatto
codice:A: while() { B: while() { last A; } }
Alla batteria dai retta ballA
Non puoi con una singola break ...
No MP tecnici (non rispondo nemmeno!), usa il forum.
quindi tocca fare goto?
Alla batteria dai retta ballA
No ...
Devi usare due break ... la seconda, nel ciclo piu' esterno, deve essere controllata da una if con una variabile booleana settata nel ciclo piu' interno ...
No MP tecnici (non rispondo nemmeno!), usa il forum.
come?Originariamente inviato da gianvituzzi
ok risolto
Considera anche che se la condizione d'uscita è un errore, allora puoi anche lanciare un eccezione.
;-)
codice:bool leaveloop = false; circular_buffer<buffer> cb_local(numbuff); while(1) { WaitForSingleObject(hevent, INFINITE); EnterCriticalSection(&users_mutex); cb_local.swap(users[threadid]); LeaveCriticalSection(&users_mutex); while (!cb_local.empty()) { int ret = s->SendBytes(cb_local.at(0).data, cb_local.at(0).bytesRecorded); if (SOCKET_ERROR == ret) { leaveloop = true; break; } cb_local.pop_front(); } if(leaveloop) break; }
Alla batteria dai retta ballA
La condizione d'uscita è un errore, quindi lancia un eccezione (sono state create apposta).
ad esempio in pseudo codice sulla falsariga di quanto hai postato:
codice:#include <stdexcept> namespace ig{ void RuntimeAssert (const bool theRuntimeAssertion){ if (false == theRuntimeAssertion){ throw std::runtime_error (); } } } ... bool leaveloop = false; circular_buffer<buffer> cb_local(numbuff); while(1) { WaitForSingleObject(hevent, INFINITE); EnterCriticalSection(&users_mutex); cb_local.swap(users[threadid]); LeaveCriticalSection(&users_mutex); while (!cb_local.empty()) { const int ret = s->SendBytes(cb_local.at(0).data, cb_local.at(0).bytesRecorded); ig::RuntimeAssert (SOCKET_ERROR != ret); } }