Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Lekcja 15] Kalkulator do sprawdzenia

Ostatnio zmodyfikowano 2015-01-06 20:21
Autor Wiadomość
medicineman
Temat założony przez niniejszego użytkownika
[Lekcja 15] Kalkulator do sprawdzenia
» 2015-01-06 10:19:40
Witajcie.

Jestem zielony z programowania i dopiero się uczę.
Mógłby mi ktoś sprawdzić kalkulator, wydaję mi się że jest dobrze zabezpieczony, ale chce się upewnić, bo może coś mi umknęło. Z góry dzięki.

Btw. Jak wrzucać tutaj kody żeby były w takim formacie jak większość tutaj na forum, a nie jak kopiowane z Worda?

C/C++
#include <iostream>

using namespace std;

int main()
{
    cout << " \t\t\t -----:: Kalkulator ::----- " << endl << endl;
   
    //Definujemy zmienne:
   
    int wybor;
    int a;
    int b;
   
    do //Petla poczatku programu
    {
        cout << endl;
        cout << " ** Wprowadz dane do obliczen ** " << endl << endl;
       
        cout << endl;
        cout << " Wprowadz pierwsza liczbe " << endl << endl;
       
        do //Petla dla pierwszej liczby
        {
            cout << "a = ";
            cin >> a;
           
            cin.clear(); //czyszczenie strumienia
            cin.sync();
           
            if( a == cin.fail() ) //jezeli zle dane to komentarz
            {
                cout << endl;
                cout << " Wpisano litere lub 0. Popraw dane! ";
                cout << endl;
            }
           
        } while( a == cin.fail() ); // jezeli zle dane to zawroc
       
        cout << endl;
        cout << " Wprowadz druga liczbe: " << endl;
       
        do //petla drugiej liczby
        {
            cout << endl;
            cout << "b = ";
            cin >> b;
            cout << endl;
           
            cin.clear(); //czyszczenie strumienia
            cin.sync();
           
            if( b == cin.fail() ) //jezeli wpisano zle to komentarz
            {
                cout << "Wpisano litere lub 0. Popraw dane!";
                cout << endl;
            }
        } while( b == cin.fail() ); //jezeli wpisano zle to zawroc
       
       
        cout << " Dane do obliczen: " << endl << endl; //zestawienie danych a i b
        cout << " a = " << a << endl;
        cout << " b = " << b << endl;
       
        do //petla dla menu
        {
            cout << endl;
            cout << "Menu:" << endl;
            cout << endl;
            cout << "[1] Dodawanie " << endl;
            cout << "[2] Odejmowanie " << endl;
            cout << "[3] Mnozenie " << endl;
            cout << "[4] Dzielenie " << endl;
            cout << "[5] Wprowadz nowe dane" << endl;
            cout << "[6] Koniec " << endl << endl;
           
            cout << "Wybor = ";
            cin >> wybor;
           
            cin.clear();
            cin.sync();
           
            switch( wybor ) //mozliwosci wyborow dla menu
            {
                case( 1 )
                    : cout << endl;
                cout << "a + b = " << a + b << endl;
                break;
               
                case( 2 )
                    : cout << endl;
                cout << "a - b = " << a - b << endl;
                break;
               
                case( 3 )
                    : cout << endl;
                cout << "a * b = " << a * b << endl;
                break;
               
                case( 4 )
                    : cout << endl;
                cout << "a / b = " << a / b << endl;
                break;
               
                case( 0 )
                    : cout << endl;
                cout << " \t       -----:: Dziekuje za skorzystanie z programu! ::----- " << endl;
                return 0;
               
                case( 6 )
                    : cout << endl;
                cout << " \t       -----:: Dziekuje za skorzystanie z programu! ::----- " << endl;
                return 0;
               
            }
        } while( wybor != 6 && wybor != 5 ); //Koniec petli dla menu
       
    } while( wybor == 5 ); //Powrot do poczatku programu
   
    return 0;
   
}
P-124288
wilkoo13
» 2015-01-06 10:29:28
Kod wpisz między [cpp.] kod [/cpp.] bez kropek

cin.clear() i cin.sync() daj po sprawdzeniu cin.fail() bo czyszcząc przed sprawdzeniem nic nie daje, usuwane są informacje czy dobrze wprowadziłeś czy źle.
A nie, bo potem znowu w pętli dowhile sprawdzasz więc sync oraz clear wstaw tuż przed proszeniem użytkownika o wprowadzenie wartości zmiennej
C/C++
do //Petla dla pierwszej liczby
{
    cin.clear();
    cin.sync();
    cout << "a = ";
    cin >> a;
   
   
    if( a == cin.fail() ) //jezeli zle dane to komentarz
    {
        cout << endl;
        cout << " Wpisano litere lub 0. Popraw dane! ";
        cout << endl;
    }
   
} while( a == cin.fail() ); // jezeli zle dane to zawroc


Tak samo zrób gdy pytasz o b.

Reszta dobrze
P-124289
medicineman
Temat założony przez niniejszego użytkownika
» 2015-01-06 13:40:15
C/C++
do //Petla dla pierwszej liczby
{
    cin.clear(); //czyszczenie strumienia
    cin.sync();
   
    cout << "a = ";
    cin >> a;
   
    if( a == cin.fail() ) //jezeli zle dane to komentarz
    {
        cout << endl;
        cout << " Wpisano litere lub 0. Popraw dane! ";
        cout << endl;
    }
   
} while( a == cin.fail() ); // jezeli zle dane to zawroc


Dziwna sprawa. Zmieniłem lokalizację cin.clear() oraz cin.sync() i teraz jak wpiszę jako zmienną 0 lub literę to program przerzuca mnie od razu do menu. Wcześniej jak wpisywałem złą zmienną to program prosił mnie o ponowne wpisanie i nie puszczał mnie nawet do opcji wpisywania zmiennej b.
P-124310
wilkoo13
» 2015-01-06 18:25:55
Nie zauważyłem tego. Nie porównujesz wpisanej liczby do fail or good. Gdyż fail i good przyjmuje 0 lub 1 w zależności czy dobrze wprowadzisz lub źle. Warunek powinien wygladac
while( cin.fail() )
Spróbuj tak zrobić i sprawdź czy działa jak powininen i wklej gotowy kod jeśli coś jest nie tak
P-124337
piotrlajewski
Zadanie 15 pętla do-while,
» 2015-01-06 19:48:16
Witam, posiłkując się lekcjami i pomocą z forum zacząłem tworzyć instrukcję do kalkulatora i napotkałem błąd: po wpisaniu kilku błędnych znaków, a potem właściwej liczby na ekranie nie wypisuje:
z    std::cout<<"Podana pierwsza liczba to: "<<a;

C/C++
#include <iostream>
int main()
{
    int a;
   
    std::cout << "Podaj pierwsza liczbe: ";
    std::cin >> a;
    if( std::cin.fail() )
    do
    {
        std::cin.clear();
        std::cin.sync();
        std::cout << "Podaj prawidlowa pierwsza liczbe: ";
        std::cin >> a;
    } while( std::cin.fail() );
    else
         std::cout << "Podana pierwsza liczba to: " << a;
   
    return 0;
}

Dzieki za pomoc!

P-124346
medicineman
Temat założony przez niniejszego użytkownika
» 2015-01-06 20:21:33
No i gra wilkoo13.

Tak jak mówiłeś dodałem cin.fail() oraz warunek a == 0;, żeby 0 mi się też łapało jako błąd, bo tak za błędne program uznawał wszystko co nie jest liczbą.

C/C++
do //Petla dla pierwszej liczby
{
    cin.clear(); //czyszczenie strumienia
    cin.sync();
   
    cout << endl;
    cout << "a = ";
    cin >> a;
   
    if( cin.fail() || a == 0 ) //jezeli zle dane to komentarz
    {
        cout << endl;
        cout << " Wpisano litere lub 0. Popraw dane! ";
        cout << endl;
    }
   
} while( cin.fail() || a == 0 ); // jezeli zle dane to zawroc


Z mojej strony temat do zamknięcia, ale widzę że inny kolega ma pytanie, także można zostawić.
P-124348
« 1 »
  Strona 1 z 1