Break e continue in C++
  • In diretta da GamesVillage.it
    • News
    • -
    • In Evidenza
    • -
    • Recensioni
    • -
    • RetroGaming
    • -
    • Anteprime
    • -
    • Video
    • -
    • Cinema

Pag 1 di 2 12 UltimoUltimo
Visualizzazione risultati da 1 a 15 di 26

Discussione: Break e continue in C++

Cambio titolo
  1. #1
    ... L'avatar di Gyo15
    Registrato il
    04-06
    Località
    casa mia
    Messaggi
    431

    Break e continue in C++

    ciao a tutti; mi potreste spiegare break e continue in C++ con parole facili e potreste perfavore espormi degli esempi?




    P.S. non ho capito ancora come si fa la parentesi graffa..
    Spoiler:
    copio e incollo ogni volta
    ..nn dovrebbe essere così? (aperta-ALT 123) (chiusa-ALT 125) ma al mio computer nn la mette e nemmeno in dev-c++ come si fa?


    grazie anticipatamente
    il mio idolo...Final Fantasy VIII...



  2. #2
    .::: VETTO :::. L'avatar di vtt89
    Registrato il
    01-06
    Località
    tra milano e lecco
    Messaggi
    1.460
    Citazione Gyo15
    ciao a tutti; mi potreste spiegare break e continue in C++ con parole facili e potreste perfavore espormi degli esempi?




    P.S. non ho capito ancora come si fa la parentesi graffa..
    Spoiler:
    copio e incollo ogni volta
    ..nn dovrebbe essere così? (aperta-ALT 123) (chiusa-ALT 125) ma al mio computer nn la mette e nemmeno in dev-c++ come si fa?


    grazie anticipatamente
    break serve ad uscire da un ciclo quando tu vuoi...

    per quanto riguarda la parentesi graffa si fa Alt Gr + Maiusc + è (aperta)
    e Alt Gr + Maiusc + + (chiusa)

    va bene anche Alt + 123 e 125, ma per farlo funzionare il numero 123 e 125 devi digitarli dal tastierino numerico se no non va...

    {{{{{{{{{{{{{{{{{{{{{ }}}}}}}}}}}}}}}}}}}}}

  3. #3
    Headless Dove L'avatar di sydarex
    Registrato il
    07-04
    Messaggi
    7.847
    Break è un istruzione che serve ad uscire da un ciclo non perchè si verifica la condizione d'uscita, ma per un altro motivo.
    Esempio:
    Codice:
    for(i = 0; i < 10; i++) // Dovrebbe stampare i numeri da 0 a 9, ma...
    {
    if(i == 5) break; // Se i è 5, allora esce dal ciclo.
    else cout << i << endl;
    }
    Continue fa ricominciare l'iterazione, in pratica, ad un certo punto del ciclo fa saltare le istruzioni seguenti per l'iterazione cottente.
    Esempio:
    Codice:
    for(i = 0; i < 10; i++) // Deve stampare i numeri da 0 a 9 e, se sono pari, stampare il loro quadrato.
    {
    cout << i << endl;
    if (i/2 != 0) continue;
    cout << "Quadrato di " << i << ": " << i*i;
    }
    L'ultimo esempio è forzato (bastava " if (i/2 == 0) cout << "Quadrato di " << i << ": " << i*i; "), ma rende l'idea.


  4. #4
    ... L'avatar di Gyo15
    Registrato il
    04-06
    Località
    casa mia
    Messaggi
    431
    Citazione sydarex
    Break è un istruzione che serve ad uscire da un ciclo non perchè si verifica la condizione d'uscita, ma per un altro motivo.
    Esempio:
    Codice:
    for(i = 0; i < 10; i++) // Dovrebbe stampare i numeri da 0 a 9, ma...
    {
    if(i == 5) break; // Se i è 5, allora esce dal ciclo.
    else cout << i << endl;
    }
    Continue fa ricominciare l'iterazione, in pratica, ad un certo punto del ciclo fa saltare le istruzioni seguenti per l'iterazione cottente.
    Esempio:
    Codice:
    for(i = 0; i < 10; i++) // Deve stampare i numeri da 0 a 9 e, se sono pari, stampare il loro quadrato.
    {
    cout << i << endl;
    if (i/2 != 0) continue;
    cout << "Quadrato di " << i << ": " << i*i;
    }
    L'ultimo esempio è forzato (bastava " if (i/2 == 0) cout << "Quadrato di " << i << ": " << i*i; "), ma rende l'idea.
    grazie ora ho capito
    il mio idolo...Final Fantasy VIII...



  5. #5
    FRAK! L'avatar di The Dix
    Registrato il
    09-05
    Località
    Roma
    Messaggi
    11.830
    Citazione sydarex
    Continue fa ricominciare l'iterazione, in pratica, ad un certo punto del ciclo fa saltare le istruzioni seguenti per l'iterazione cottente.
    che???

  6. #6
    ... L'avatar di Gyo15
    Registrato il
    04-06
    Località
    casa mia
    Messaggi
    431
    Citazione vtt89
    break serve ad uscire da un ciclo quando tu vuoi...

    per quanto riguarda la parentesi graffa si fa Alt Gr + Maiusc + è (aperta)
    e Alt Gr + Maiusc + + (chiusa)

    va bene anche Alt + 123 e 125, ma per farlo funzionare il numero 123 e 125 devi digitarli dal tastierino numerico se no non va...

    {{{{{{{{{{{{{{{{{{{{{ }}}}}}}}}}}}}}}}}}}}}
    wow ho provato.con alt 123 e alt 125...indovina cosa è uscito?.....
    Spoiler:
    ♥(123)♣125

    ♣♣♣♣♥♥♥♥

    cmq l altro modo per farle funziona
    {{{{{{{{{{{{{{{{{{{{{{{{{{{ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
    Ultima modifica di Gyo15; 18-06-2006 alle 16:13:31
    il mio idolo...Final Fantasy VIII...



  7. #7
    Headless Dove L'avatar di sydarex
    Registrato il
    07-04
    Messaggi
    7.847
    Citazione The Dix
    che???
    Citazione Una tipica guida al C++
    Vi è una piccola ma significativa differenza tra l'istruzione break e l'istruzione continue. Come si è visto nell'ultimo esempio, break provoca l'uscita immediata dal ciclo. L'istruzione continue invece, fa in modo che le istruzioni che la seguono vengano ignorate ma non impedisce l'incremento della variabile di controllo o il controllo della condizione di test del ciclo. In altri termini, se la variabile di controllo soddisfa ancora la condizione di test, si continuerà con l'esecuzione del ciclo.
    .


  8. #8
    Stufo L'avatar di nico402
    Registrato il
    01-06
    Messaggi
    5.779
    come ha spiegato syd (posso chiamarti cos&#236 una serve per interrompere un ciclo e l'altra per ricominciare un iterazione. ma tutte e due possono essere evitate e IMHO diminuiscono la leggibilit&#224; del codice.
    Copio pari pari l'esempio break di sydarex

    Codice:
     
    for(i = 0; i < 10; i++) // Dovrebbe stampare i numeri da 0 a 9, ma... { if(i == 5) break; // Se i &#232; 5, allora esce dal ciclo. else cout << i << endl; }
    lo modifico per fare la stessa cosa senza break:
    Codice:
    //il ciclo stampa titti i numeri da uno a dieci a meno che //i non assuma un valore uguale a 5 for(i = 0; i < 10 && i!=5; i++) cout << i << endl;


  9. #9
    FRAK! L'avatar di The Dix
    Registrato il
    09-05
    Località
    Roma
    Messaggi
    11.830
    si in effetti credo anche io che sia meglio evitare

    @Syd: ah ok ora ho capito TY

  10. #10
    www.fabiorusconi.com L'avatar di specopsrusca
    Registrato il
    11-02
    Località
    Como
    Messaggi
    5.061
    Citazione nico402
    possono essere evitate e IMHO diminuiscono la leggibilità del codice.
    in determinati casi l'uso è quasi obbligatorio ed insostituibile...

    My Hardware - My Discography - My Last.fm - Be More Shepherd

  11. #11
    StorieDallaSalaMacchine L'avatar di miniBill '90
    Registrato il
    08-05
    Località
    Bergerac
    Messaggi
    4.204
    Codice:
    switch(a){
        case 1:
           //codice
            break;//&#232; obbligatorio, esempio 1 di quando serva il break
    }
    
    Oppure nel loop di un VG, per questione di efficenza non faccio while(c) ma:
    while(true){
    
    e magari dentro ci metto un
    if(esc)
        break;
    che &#232; molto + efficente di un while(c) e if(esc) c=false;
    }

    ESISTE UN UNICO AMMINISTRATORE
    Quoto-thisisgorman-
    (La mi ex-firma sta qua)

  12. #12
    Stufo L'avatar di nico402
    Registrato il
    01-06
    Messaggi
    5.779
    Citazione miniBill '90
    Codice:
    switch(a){
        case 1:
           //codice
            break;//&#232; obbligatorio, esempio 1 di quando serva il break
    }
    
    Oppure nel loop di un VG, per questione di efficenza non faccio while(c) ma:
    while(true){
    
    e magari dentro ci metto un
    if(esc)
        break;
    che &#232; molto + efficente di un while(c) e if(esc) c=false;
    }
    nello switch() si &#232; "obbligatorio" anzi anche li con degli if all'inizio di ogni case si pu&#242; evitare... ma nel resto del codice &#232; mai indispensabile. basta mettere la condizione nel ciclo


  13. #13
    www.fabiorusconi.com L'avatar di specopsrusca
    Registrato il
    11-02
    Località
    Como
    Messaggi
    5.061
    Citazione nico402
    nello switch() si è "obbligatorio" anzi anche li con degli if all'inizio di ogni case si può evitare... ma nel resto del codice è mai indispensabile. basta mettere la condizione nel ciclo
    io continuo a nn essere d'accordo, o meglio: nella programmazione nn esiste mai un unico modo per scrivere un programma... quindi sicuramente il break può essere sostituito, ma è altrettanto vero ke in alcuni casi il suo utilizzo risulti + comprensibile ed adatto, ecco l'esempio all'interno di un main:

    Codice:
    int main (int argc, char*argv[])
    {
    	int sd;
    	struct sockaddr_in server_addr;
    	int server_len = sizeof (server_addr);
    	
    	char CH_TERM;
    	char CH_SEQ[64]="zvutsrqponmlihgfedcba";
    	char CH_ID[5];
    	int ID;
    	char conto[3];
    	int num_conto;
    
    	
    	addr_initialize (&server_addr, PORT, (long) inet_addr(IP_ADDR));
    	sd = socket(AF_INET, SOCK_STREAM, 0);
    
    	int err = connect(sd, (struct sockaddr*) &server_addr, server_len);
    
    	if(err < 0)
    	  {
    	    printf("\nConnessione non riuscita\n");
    	    return -1;
    	  }
    	else
    	  printf("\nConnessione effettuata\n");
    	
    	int i = 0;
    	for(i= 0; i<21; i++)
    	  {
    	    sprintf(CH_ID, "%d\n", i);
    	    int j = 0;
    	    do
    	      {
    		send(sd, &CH_ID[j], 1, 0);
    		printf("%c", CH_ID[j]);
    		j++;
    	      } while(CH_ID[j-1] != '\n');
    
    	    printf(" ");
    
    	    FILE* fp = fopen ("term.txt", "r");
    	    fseek (fp, i, SEEK_SET);
    	    CH_TERM = fgetc (fp);
    	    fclose(fp);
    	    
    	    if (CH_TERM == 'q')
    	      break;
    
    	    j = 0;
    	    do
    	      {
    		send(sd, &CH_SEQ[j], 1, 0);
    		j++;				
    	      } while(CH_SEQ[j-1] != CH_TERM);
    
    	    j=0;
    	    do
    	      {
    		recv(sd, &conto[j], 1, 0);
    		j++;
    	      } while (conto[j-1] != '\n');
    	    
    	    num_conto = atoi(conto);
    
    	    printf("La stringa inviata e' composta da %d caratteri\n", num_conto);
    	    
    	  }
    
    	close(sd);
    }
    guardate il break in grassetto... sarà ke sono un novellino in programmazione, ma secondo me il suo utilizzo è migliore e + lineare rispetto ad altre soluzioni...

    My Hardware - My Discography - My Last.fm - Be More Shepherd

  14. #14
    Stufo L'avatar di nico402
    Registrato il
    01-06
    Messaggi
    5.779
    Citazione specopsrusca
    io continuo a nn essere d'accordo, o meglio: nella programmazione nn esiste mai un unico modo per scrivere un programma... quindi sicuramente il break può essere sostituito, ma è altrettanto vero ke in alcuni casi il suo utilizzo risulti + comprensibile ed adatto, ecco l'esempio all'interno di un main:

    Codice:
    int main (int argc, char*argv[])
    {
        int sd;
        struct sockaddr_in server_addr;
        int server_len = sizeof (server_addr);
        
        char CH_TERM;
        char CH_SEQ[64]="zvutsrqponmlihgfedcba";
        char CH_ID[5];
        int ID;
        char conto[3];
        int num_conto;
    
        
        addr_initialize (&server_addr, PORT, (long) inet_addr(IP_ADDR));
        sd = socket(AF_INET, SOCK_STREAM, 0);
    
        int err = connect(sd, (struct sockaddr*) &server_addr, server_len);
    
        if(err < 0)
          {
            printf("\nConnessione non riuscita\n");
            return -1;
          }
        else
          printf("\nConnessione effettuata\n");
        
        int i = 0;
        for(i= 0; i<21; i++)
          {
            sprintf(CH_ID, "%d\n", i);
            int j = 0;
            do
              {
            send(sd, &CH_ID[j], 1, 0);
            printf("%c", CH_ID[j]);
            j++;
              } while(CH_ID[j-1] != '\n');
    
            printf(" ");
    
            FILE* fp = fopen ("term.txt", "r");
            fseek (fp, i, SEEK_SET);
            CH_TERM = fgetc (fp);
            fclose(fp);
            
            if (CH_TERM == 'q')
              break;
    
            j = 0;
            do
              {
            send(sd, &CH_SEQ[j], 1, 0);
            j++;                
              } while(CH_SEQ[j-1] != CH_TERM);
    
            j=0;
            do
              {
            recv(sd, &conto[j], 1, 0);
            j++;
              } while (conto[j-1] != '\n');
            
            num_conto = atoi(conto);
    
            printf("La stringa inviata e' composta da %d caratteri\n", num_conto);
            
          }
    
        close(sd);
    }
    guardate il break in grassetto... sarà ke sono un novellino in programmazione, ma secondo me il suo utilizzo è migliore e + lineare rispetto ad altre soluzioni...
    Spoiler:
    Codice:
    int main (int argc, char*argv[])
    {
        int sd,status=0;
        struct sockaddr_in server_addr;
        int server_len = sizeof (server_addr);
    
        char CH_TERM;
        char CH_SEQ[64]="zvutsrqponmlihgfedcba";
        char CH_ID[5];
        int ID;
        char conto[3];
        int num_conto;
    
    
        addr_initialize (&server_addr, PORT, (long) inet_addr(IP_ADDR));
        sd = socket(AF_INET, SOCK_STREAM, 0);
    
        int err = connect(sd, (struct sockaddr*) &server_addr, server_len);
    
        if(err < 0)
        {
            printf("\nConnessione non riuscita\n");
            return -1;
        }
        else
            printf("\nConnessione effettuata\n");
    
        int i = 0;
        for(i= 0; i<21&&status==0; i++)
        {
            sprintf(CH_ID, "%d\n", i);
            int j = 0;
            do
            {
                send(sd, &CH_ID[j], 1, 0);
                printf("%c", CH_ID[j]);
                j++;
            }
            while(CH_ID[j-1] != '\n');
    
            printf(" ");
    
            FILE* fp = fopen ("term.txt", "r");
            fseek (fp, i, SEEK_SET);
            CH_TERM = fgetc (fp);
            fclose(fp);
    
            if (CH_TERM == 'q')
                status=1;
            else
            {
    
                j = 0;
                do
                {
                    send(sd, &CH_SEQ[j], 1, 0);
                    j++;
                }
                while(CH_SEQ[j-1] != CH_TERM);
    
                j=0;
                do
                {
                    recv(sd, &conto[j], 1, 0);
                    j++;
                }
                while (conto[j-1] != '\n');
    
                num_conto = atoi(conto);
    
                printf("La stringa inviata e' composta da %d caratteri\n", num_conto);
            }
        }
    
        close(sd);
    }
    ho aggiunto una variabile di stato e messo le graffe all'if. così va senza un break...


  15. #15
    www.fabiorusconi.com L'avatar di specopsrusca
    Registrato il
    11-02
    Località
    Como
    Messaggi
    5.061
    Citazione nico402
    ho aggiunto una variabile di stato e messo le graffe all'if. così va senza un break...
    ok ok... come avevo detto ogni progretto ha innumerevoli suluzioni e, a dire il vero, la tua mi sembra un "forzare un cabiamento"
    cioè... per sostituire una semplice istruzione, una singola parola (break, appunto), hai:
    - aggiunto una variabile (uso maggiore di memoria, seppur minimissimo)
    (- "sostituito" break con quella variabile)
    - aggiunta una condizione al ciclo principale
    - annidato un "nuovo" else

    3 operazioni in + rispetto alla mia soluzione... e IMHO, è + "veloce" capire il mio codice

    sarà ke i ns proff, del break, ne fanno uso "normale" (come il sottroscritto) e nn c'hanno mai detto nulla sul nn usarlo, ma io proprio nn riesco a trovare una valida motivazione per il cercare-di-evitarlo-come-la-peste

    My Hardware - My Discography - My Last.fm - Be More Shepherd

Pag 1 di 2 12 UltimoUltimo

Regole di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •