PDA

View Full Version : [c++] aiutino con le eccezioni


x-t
11-04-2009, 15:21
Qualcuno di buona volontà mi può spiegare perchè queste quattro linee di codice non funzionano a runtime? è da 3 ore che ci sbatto la testsa :muro:
Vi sarei molto grato :(
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;

int Divide(int a, int b) throw(char*) {
if (b) return a/b;
throw "Errore";
}

int main (int argc, char *argv[])
{
try {
cout << "Il risultato e` " << Divide(4, 0);
}
catch(char* Stringa) {
cout << Stringa << endl;
return -1;
}
}


Ecco l'errore che mi viene restituito a runtime:
http://www.allfreeportal.com/imghost/images/793242errore.jpg

_Claudio
11-04-2009, 16:41
#include <iostream>
using namespace std;

int Divide(int, int);

int main (int argc, char *argv[]) {
try {
cout << "Il risultato e` " << Divide(4, 0);
}
catch(char* Stringa) {
cout << Stringa << endl;
return -1;
}

return 0;
}

int Divide(int a, int b) {
if (b) return a/b;
throw "Errore";
}


A me così va...

stdecden
11-04-2009, 16:54
A me così va...

Confermo!:D

_Claudio
11-04-2009, 16:59
Tra l'altro se vogliamo fare i puristi ci sono alcuni errori di forma... ma vabè... la forma è pur sempre soggettiva...

Il consiglio spassionato però è non includere ciò che non è utile.

Vogliamo mettere come rende così...


#include <iostream>

using namespace std;

int divide(int, int);

void main (int argc, char *argv[]) {
try {
cout << "Il risultato e' " << divide(4, 0);
} catch(char* stringa) { cout << stringa << endl; }
}

int divide(int a, int b) {
if(b != 0) return a/b;
else throw "Errore";
}

x-t
11-04-2009, 17:11
Uso dev c++... può darsi che è per questo che a me non funziona a runtime???? e poi per quale motivo non dovrebbe funzionare???? :confused:

_Claudio
11-04-2009, 17:14
Uso dev c++... può darsi che è per questo che a me non funziona a runtime???? e poi per quale motivo non dovrebbe funzionare???? :confused:

:doh: prima di correggere gli errori di ciò che scrivi dovresti allora correggere gli errori di dev-cpp...

Usa Visual C++ express 2008 piuttosto...

Raiki
12-04-2009, 08:34
O Code::Blocks

WarDuck
12-04-2009, 13:49
Scusate, ma sbaglio o nella condizione all'interno della funzione Divide c'è scritto:

if (b) return a/b?

Non dovrebbe esserci scritto, if (b>0) return a/b?

stdecden
12-04-2009, 13:52
No, perché

if (b)
equivale a
if (b != 0)

_Claudio
12-04-2009, 14:38
No, perché

if (b)
equivale a
if (b != 0)

Esatto, il quoziente è definito anche per denominatore negativo... ma è buona pratica definire esplicitamente le condizioni, sia per eventuali problemi relativi al compilatore, sia per una maggiore chiarezza ed eleganza del codice.

ndakota
12-04-2009, 14:39
infatti, negativo può essere :p