Oppure

Loading
13/09/08 19:36
Luk3
Hi all!
Mi spiegate come catchare un eccezione in C++?
Questo è il mio codice per adesso:
Ditemi se ci sn altri errori in caso :rotfl:

#include <cstdlib>
#include <iostream>
#include <fstream.h>

using namespace std;

int main(int argc, char *argv[])
{
    char nome[100];
    char cognome[100];
    char telefono[100];
    char cellulare[100];
    char email[100];
    char note[10000];
    char percorso[3000];
    char scelta;
    start:
    cout<<"\t---------------------------------------"<<endl;
    cout<<"\t|            Rubrica                  |"<<endl;
    cout<<"\t| 1. Nuovo                            |"<<endl;
    cout<<"\t| 2. Leggi                            |"<<endl;
    cout<<"\t| 3. Esci                             |"<<endl;
    cout<<"\t---------------------------------------"<<endl;
    cout<<"\nInserisci la tua scelta:\n"<<endl;
    cin>>scelta;
    if(scelta == '1')
    {
        cout<<"\nInserisci nome:\n"<<endl;
        cin>>nome;
        cout<<"\nInserisci cognome:\n"<<endl;
        cin>>cognome;
        cout<<"\nInserisci telefono:\n"<<endl;
        cin>telefono;
        cout<<"\nInserisci Cellulare:\n"<<endl;
        cin>>cellulare;
        cout<<"\nInserisci eMail:\n"<<endl;
        cin>>email;
        cout<<"\nInserisci Note:\n"<<endl;
        cin>>note;
        cout<<"\nInserisci ora il percorso del file, compreso di nome ed estensione (*.txt):\n"<<endl;
        cin>>percorso;
        try
        {
        ofstream out(percorso, ios::app);
        out<<nome<<endl;
        out<<cognome<<endl;
        out<<telefono<<endl;
        out<<cellulare<<endl;
        out<<email<<endl;
        out<<note<<endl;
        out.close();
        cout<<"\nFile salvato!\n"<<endl;
        goto start;
        }
        catch
        {
        cout<<"\nErrore durante il salvataggio.\n"<<endl;
        goto start;
        }
    }

    if(scelta == '2')
    {

    }

    if(scelta == '3')
    {
        return 0;
    }


    return 0;
}
aaa
14/09/08 10:02
pierotofy
Il grave errore semantico che vedo è quello di usare il goto... che esiste, ma non dovrebbe mai essere usato al fine di una buona programmazione.
Il mio blog: piero.dev
14/09/08 12:36
Luk3
Postato originariamente da pierotofy:

Il grave errore semantico che vedo è quello di usare il goto... che esiste, ma non dovrebbe mai essere usato al fine di una buona programmazione.


Già, me lo dicono tutti... però in C++ non sono granchè...
aaa
24/09/08 17:00
manvb.net
per gestire un'eccezzione puoi usare il costrutto try{
//codice che può produrre errore
}
catch(tipo variabile){
//gestione errore
}

invece per lanciarla:
throw "stringa";

esempio:
int Divide(int a, int b) {
if (b) return a/b;
throw "Divisione per zero";
}

Per evitare i goto potresti usare una o più funzioni.
aaa
06/10/08 12:12
gioser
Aggiungo un esempio di uso di una classe per rappresentare l'eccezione:

#include <iostream>

class EccezioneDivisionePerZero
{
public:
    EccezioneDivisionePerZero(double dividendo) :
        m_dividendo(dividendo)
    {
    }

    void Stampati()
    {
        using namespace std;
        cerr << "Errore divisione per zero di " << m_dividendo << endl;;
    }

private:
    double m_dividendo;
    std::string m_messaggio;
};


double dividi(double d1, double d2) 
{
    if (0.0 == d2)
        throw EccezioneDivisionePerZero(d1);
    else
        return d1 / d2;
}

int main()
{
    using namespace std;
    double d;
    try
    {
        d = dividi(10.0, 2.0);
        cout << "la prima divisione fa " << d << endl;
        d = dividi(10.0, 0.0);
        cout << "la seconda divisione fa " << d << endl;
    }
    catch (EccezioneDivisionePerZero ex)
    {
        ex.Stampati();
        return 100;
    }
    return 0;
}
aaa