Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [C++] uscire da while annidate

    Salve,

    prendendo come esempio questo codice:

    codice:
    while() // A
    {
    	while() // B
    	{
    		break;
    	}
    }
    come faccio ad uscire con una break anche da A??

    grazie
    Alla batteria dai retta ballA

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    codice:
    while() // A
    {
    	while() // B
    	{
    		break;
    	}
    
                 break;
    }
    ... ma mi sembra troppo ovvio ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    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

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Non puoi con una singola break ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    quindi tocca fare goto?
    Alla batteria dai retta ballA

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    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.

  7. #7
    ok risolto
    Alla batteria dai retta ballA

  8. #8
    Originariamente inviato da gianvituzzi
    ok risolto
    come?

    Considera anche che se la condizione d'uscita è un errore, allora puoi anche lanciare un eccezione.
    ;-)

  9. #9
    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

  10. #10
    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);
    		}
    	}

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.