PDA

Visualizza la versione completa : [c++]eccezioni


mica81
09-04-2005, 17:11
ciao a tutti.
guardate questo codice:


#include<iostream.h>

void eccezione()
{
int a, b;
cout<<"Introduci due interi positivi:\n";
cin>>a>>b;
if (a == b) throw "errore! i due numeri sono uguali\n";
else if(a > b) cout<<"il maggiore tra i due e': "<< a <<"\n";
else if (b > a) cout<<"il maggiore tra i due e': "<< b <<"\n";

}

int main()
{
int conta(0);
while(conta < 5)
{
try
{ eccezione(); }

catch(char* p)
{ cout<< p <<endl; }

conta = conta +1;
}//return false;

system("pause");
return 0;
}

funziona benissimo a parte che il messaggio di errore del'eccezione non viene visualizzato. cosa sbaglio? :confused:

unit1
09-04-2005, 17:46
non conosco il c++ ma "cin>>a>>b;" mi sa di strano.
prova con il c normale!

internet
09-04-2005, 18:21
gcc version 3.3.2 su win
con la modifica segnata in blu


#include <iostream>

using namespace std;

void eccezione()
{
int a, b;
cout<<"Introduci due interi positivi:\n";
cin >> a >> b;
if (a == b) throw "errore! i due numeri sono uguali\n";
else if(a > b) cout<<"il maggiore tra i due e': "<< a <<"\n";
else if (b > a) cout<<"il maggiore tra i due e': "<< b <<"\n";
}

int main()
{
int conta(0);
while(conta < 5)
{
try
{ eccezione(); }

catch(const char* p)
{ cout<< p <<endl; }

conta = conta +1;
}

system("pause");
return 0;
}


il run


Introduci due interi positivi:
2
2
errore! i due numeri sono uguali

Introduci due interi positivi:
1
2
il maggiore tra i due e': 2
Introduci due interi positivi:

anton1o
09-04-2005, 19:49
Premetto che non conosco bene il c++, e non conosco l'istruzione throw,

ma mi chiedo perchè tu usi questo :

if (a == b) throw "errore! i due numeri sono uguali\n";


e non questo :

if (a == b) cout<<"errore! i due numeri sono uguali\n";


Ciao Antonio.

dekdek
09-04-2005, 19:53
Perche' non vuole stampare un messaggio bensi' lanciare (throw) un eccezione, cioe' un errore che puo' essere gestito dal programma stesso tramite l'altra istruzione catch.

anton1o
09-04-2005, 20:22
dekdek, grazie per la risposta :)

In pratica è una gestione interna degli errori, interessante non lo sapevo!

e invece la "const" che ha inserito "internet" cosa cambia ?

Ciao Antonio.

dekdek
09-04-2005, 20:26
Non ricordo se c'entra qualcosa... Ormai mi sono Javizzato! :)

internet
09-04-2005, 21:04
Originariamente inviato da anton1o
dekdek, grazie per la risposta :)

In pratica è una gestione interna degli errori, interessante non lo sapevo!

e invece la "const" che ha inserito "internet" cosa cambia ?

Ciao Antonio.

Senza quel const va in segmentation fault, almeno gcc su win.
Questo perchè le string literals (cioè quelle che metti tra apici) in C/C++ sono costanti, e l'uso del const serve a garantire che il programma non vada a modificare queste stringhe.

mica81
09-04-2005, 21:14
aaah grande grazie mille! non ci avevo pensato!
io come compilatore uso il dev-cpp che è un porting del compilatore di gnu.

internet
09-04-2005, 21:56
Io ho usato questo http://www.delorie.com/djgpp/
Si tratta del primo porting (1989) del gcc su piattaforma dos poi windows.
lo uso come in linux/unix, a linea di comando, per progetti complessi lo abbino a Make

Loading