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; }
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.
oli pienestä kiinni taas mutta suurkiitos! :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.