Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    7

    [C++] gestione eccezioni

    Salve a tutti. Durante lo sviluppo di un programma mi sono imbattuto in un errore con try, throw e catch.
    Il programma in questione è costituito da un certo numero di funzioni e da un main, il cui corpo è interamente contenuto in un ciclo do-while

    int main() {
    do{
    ...
    ...
    ...
    ...
    }
    while(x<7);
    return 0;
    }

    desidero fare in modo che, ogniqualvolta viene sollevata un'eccezione, il programma ricominci (sfruttando il ciclo do-while) piuttosto che terminare.
    Purtroppo se posiziono il blocco try e il catch all'interno del ciclo

    int main() {
    do{
    try{
    ...
    ...
    ...
    ...
    }
    catch (int x) {
    ...
    ...
    }
    }
    while(x<7);
    return 0;
    }

    il programma viene compilato ma durante l'esecuzione, ogni volta che si incontra un'eccezione, viene generato un ciclo infinito.
    Che fare dunque? come posso fare per ottenere il risultato desiderato (possibilmente senza usare goto) ?
    grazie

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Di che eccezione stiamo parlando? Di una creata da te o di una proveniente da librerie di terze parti? (Standard library compresa.)
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    7
    sono 5 o 6 eccezioni, ma tutte create da me.
    poi le riunisco tutte in un unico catch

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Personalmente metterei ogni blocco di codice che può lanciare eccezioni dentro un try {} catch() e lo gestirei ad un livello inferiore. In genere quando si arriva al main ci si limita a far terminare il programma in modo pulito.

    Per evitare il ciclo infinito puoi mettere una variabile di flag che conti quante volte viene sollevata un'eccezione e inserirla nel do {} while().
    Del resto se il programma continua a lanciare eccezioni significa che c'è qualcosa di sbagliato.

    codice:
    int main() {
       int maxExcept(10);
       do{
         try{
         ...
         ...
         ...
         ...
         } catch (int x) {
         ...
         ...
         maxExcept--;
        }
      } while(x<7 && maxExcept != 0);
    return 0;
    }
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.