Prosty kalkulator - co mogę poprawić, aby był lepszy?

0
 #include <iostream>
#include <windows.h>

using namespace std;

float dodawanie(float a, float b)
{
    return a + b;
}

float odejmowanie(float a, float b)
{
    return a - b;
}

float mnozenie(float a, float b)
{
    return a * b;
}

float dzielenie(float a, float b)
{
    return (a/b);
}
int main()
{
    int wybor;
    float pierwsza, druga;

    while(wybor != 9)
    {
        cout << "Podaj pierwsza liczbe:";
        cin >> pierwsza;

        cout << "Podaj druga liczbe:";
        cin >> druga;

        cout << "Wybierz jedna z opcji:\n"
                "1.Dodawanie\n"
                "2.Odejmowanie\n"
                "3.Mnozenie\n"
                "4.Dzielenie\n";
                "9.Wyjscie\n";

        cout << "Podaj swoj wybor: ";
        cin >> wybor;

        switch(wybor)
        {
        case 1:
            cout << "Wynik dodawania tych dwoch liczb to: " << dodawanie(pierwsza,druga) << endl;
            break;

        case 2:
            cout << "Wynik odejmowania tych dwoch liczb to: " << odejmowanie(pierwsza,druga) << endl;
            break;

        case 3:
            cout << "Wynik mnozenie tych dwoch liczb to: " << mnozenie(pierwsza,druga) << endl;
            break;

        case 4:
            if(druga == 0) cout << "Nie mozna dzielic prez zero !!!\n";
            else
            cout << "Wynik dzielenia tych dwoch liczb to: " << dzielenie(pierwsza,druga) << endl;
            break;
        }
        Sleep(2000);
        system("cls");
    }

    return 0;
}

Co tu mogę poprawić aby był lepszy ? Dlaczego w menu nie wyświetla 9 opcji na ekranie ?

0

Trochę zmieniłem kod:

#include <iostream>
#include <windows.h>

using namespace std;

float dodawanie(float a, float b)
{
    return a + b;
}

float odejmowanie(float a, float b)
{
    return a - b;
}

float mnozenie(float a, float b)
{
    return a * b;
}

float dzielenie(float a, float b)
{
    return (a/b);
}
int main()
{
    int wybor;
    float pierwsza, druga;

    while(true)
    {
        cout << "Wybierz jedna z opcji:\n"
                "1.Dodawanie\n"
                "2.Odejmowanie\n"
                "3.Mnozenie\n"
                "4.Dzielenie\n";
                "9.Wyjscie\n";

        cout << "Podaj swoj wybor: ";
        cin >> wybor;

        if(wybor == 9) break;
        
        cout << "Podaj pierwsza liczbe:";
        cin >> pierwsza;

        cout << "Podaj druga liczbe:";
        cin >> druga;

        switch(wybor)
        {
        case 1:
            cout << "Wynik dodawania tych dwoch liczb to: " << dodawanie(pierwsza,druga) << endl;
            break;

        case 2:
            cout << "Wynik odejmowania tych dwoch liczb to: " << odejmowanie(pierwsza,druga) << endl;
            break;

        case 3:
            cout << "Wynik mnozenie tych dwoch liczb to: " << mnozenie(pierwsza,druga) << endl;
            break;

        case 4:
            if(druga == 0) cout << "Nie mozna dzielic prez zero !!!\n";
            else
            cout << "Wynik dzielenia tych dwoch liczb to: " << dzielenie(pierwsza,druga) << endl;
            break;

        default:
            cout << "Nie ma takiej opcji\n";
            break;
        }
        Sleep(2000);
        system("cls");
    }

    return 0;
}
 
0

Może dodaj obsługe błędnie wprowadzonej opcji?

0

A co tutaj mam błędnego ?

0

to mam zastosować wyjątki ?

0

Właściwie to nie musisz nawet definiować tych funkcji działań. Wystarczy po prostu w cout przekazać wyrażanie np: cout << a + b << endl; Albo jakąś lambdę zrobić. Jeżeli już chcesz wykorzystać te funkcje to zrób je np jako inline.

0

a jak to sprawdzać czy nie został inny typ niż liczbowy ?

0

dla float to zadziała ?

0

Dodaj #include<locale> i zastosuj funkcję std::isdigit(wybor, std::locale::global(std::locale("")) To się nie wywali. :)

0

Nie wyświetla 9, ponieważ

cout << "Wybierz jedna z opcji:\n"
                "1.Dodawanie\n"
                "2.Odejmowanie\n"
                "3.Mnozenie\n"
                "4.Dzielenie\n";
                "9.Wyjscie\n";

Masz średnik w przed ostatniej linijce.

0

Po wypisaniu 4 opcji masz srednik, dlatego 9 Ci nie wypisuje

0

Ok, ale jak sprawdzić czy liczby są typu float ?

0
#include <string>
#include <sstream>

bool isFloat( string myString ) {
    std::istringstream iss(myString);
    float f;
    iss >> noskipws >> f; // noskipws considers leading whitespace invalid
    // Check the entire string was consumed and if either failbit or badbit is set
    return iss.eof() && !iss.fail(); 
}
0

kurs średni, ale opisane na przykładzie: http://qvazar.pl/kurs-cpp/obsluga-bledow-cin/metody-clear-good-fail

0

kaczus, ale to chyba tylko dla intow dziala ? To co wysłałeś.

0

za bardzo sie nie znam ale liczby zmiennoprzecinkowe zapisuje sie z . (kropka) a nie przecinkiem. sprobuj czy metody-clear-good-fail dziala dla floatow. nic nie zaszkodzi

0

Sprawdzanie float:

http://stackoverflow.com/questions/447206/c-isfloat-function

Żeby ulepszyć ten program, możesz zrobić okienkowy kalkulator taki jak w windowsie :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1