Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: laskin

pr0l3 [23.05.2009 23:32:36]

#

kokeilin try-catch juttuja ja koodasin laskimen joka ei toimi osaako joku kertoa miksi?
onko koodissa jotain vikaa?

#include <cmath>
#include <iostream>
#include <stdexcept>

double laske(const double a = 0, const char m = '+', const double b = 0)
throw(std::domain_error, std::invalid_argument) {
	switch (m) {
		case '+': return a+b;
		case '-': return a-b;
		case '*': return a*b;
		case '/': if (!a*!b) throw std::domain_error("0/0 ei onnistu");
			return a/b;
		case '^': if (!a*!b) throw std::domain_error("0^0 ei onnistu");
			return std::pow(a,b);
		default: throw std::invalid_argument(std::string() + m);
	}
}

int main()
try {
	double a, b; char m;
	if (!(std::cin >> a >> m >> b)) {
		throw std::runtime_error("virhe: anna lasku esim 12.3 + 45.6");
	}
	std::cout << laske((a, m, b)) << std::endl;
} catch (std::invalid_argument &e) {
	std::cout << "virhe parametreissa: tuntematon lasku: " << e.what() << std::endl;
	return 1;
} catch (std::domain_error &e) {
	std::cout << "virhe luvuissa: " << e.what() << std::endl;
	return 1;
} catch (std::runtime_error &e) {
	std::cout << e.what() << std::endl;
	return 1;
}

mikkop92 [24.05.2009 05:55:45]

#

laske((a, m, b)) on väärin, ota siitä ylimääräiset sulut pois niin toimii. Tuossa muodossa laske-funktio saa arvon vain a-argumenttiin kun muut argumentit ovat oletusarvossaan.

http://en.wikipedia.org/wiki/Comma_operator

pr0l3 [24.05.2009 10:27:11]

#

oli pienestä kiinni taas mutta suurkiitos! :)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta