Blocco try catch

di il
4 risposte

Blocco try catch

Salve a tutti.
Sto sperimentando il blocco try catch. Ho scritto questo piccolo programma.

#include <iostream>

using namespace std;

int main()
{
    int a, b;
    cout << "Primo: ";    cin >> a;
    cout << "Secondo: ";  cin >> b;
    try {  cout << a/b; }
    catch(...)
    {
        cout << "C'è stato un errore.";
        system("PAUSE");
    }
    cout<<"Continua normalmente";

    return 0;
}
Ho inserito un valore per la var.a diverso da zero, mentre il valore zero per b.
Mi aspettavo di veder visualizzato "C'è stato un errore." ma non succede.
Il programma termina con il ritorno di un valore di errore diverso da zero.
Non mi spego, qualcuno può aiutarmi?
Mille grazie

4 Risposte

  • Re: Blocco try catch

    "Division by zero doesn't throw a C++ exception: it's just formally Undefined Behavior. Since you're getting a “floating point exception” (which is not a C++ exception, it's not catchable via a C++ `catch`) ...."
  • Re: Blocco try catch

    Grazie, Oregon per la risposta.
  • Re: Blocco try catch

    Prova il classico
    
    #include <iostream>
    #include <exception>
    using namespace std;
    
    int main() {   
        int i;
        try {    
            for(i = 1; i <= 1000000; i++) 
                int *a = new int[1000000]; 
        }
        catch(exception& e){
            cout << "C'e' stato un errore all'iterazione " << i << " : " << e.what() << endl;
            system("PAUSE");
        }
        cout << "Continua normalmente";  
        return 0;
    }
    
  • Re: Blocco try catch

    Grazie Weierstrass.
    Avevo trovato un esempio simile in rete. In effetti funziona ma non con la divisione per zero. per la motivazione illustratata da Oregon.
    Io ho scritto qualche programma in altri lunguaggi dove è presente un meccanismo per intercettare gli errori.
    In c++ ho visto che ci sono classi specifiche per ciò:da http://www.cplusplus.com/reference/stdexcept/runtime_error/
    
    exception  Standard exception class (class )
    logic_error  Logic error exception (class )
    range_error  Range error exception (class )
    overflow_error Overflow error exception (class )
    underflow_error Underflow error exception (class )
    

    E' un po più complesso ma si puo gestire.
Devi accedere o registrarti per scrivere nel forum
4 risposte