Rozdział 15 Zadanie drugie.
Ostatnio zmodyfikowano 2018-03-27 17:28
struś Temat założony przez niniejszego użytkownika |
Rozdział 15 Zadanie drugie. » 2018-03-26 19:29:24 Napisz prosty kalkulator, który będzie potrafił dodawać, odejmować, mnożyć i dzielić. Program ten ma działać następująco: 1. Wypisuje obecny wynik 2. Wprowadź liczbę 3. Wybierz działanie (jeżeli liczba różna od 0) 4. Wykonaj obliczenia (jeżeli liczba różna od 0) 5. Wróć do kroku 1. 6. Jeżeli wprowadzoną liczbą jest 0, zakończ program. *Zabezpiecz wcześniej napisany kalkulator przed podawaniem niepoprawnych liczb i operacji. Wykorzystaj wiedzę zdobytą z pierwszego zadania pracy domowej niniejszego rozdziału. Zabezpiecz również w analogiczny sposób przed możliwością wyboru nieprawidłowego działania. Wystrugałem takiego pinokia, ale nie do końca on działa. Pierwsze pięć punktów wydaje mi się zrobione dobrze, natomiast mam problem przy 6 punkcie. W momencie w którym wprowadzę jako liczbę - 0 - program nie chce się zakończyć. Dopiero kończy się, kiedy przeprowadzę jakiekolwiek działanie na dwóch zerach. //-- EDIT Dobra poprawiłem trochę kod + zabezpieczyłem przed wpisywaniem niepoprawnych znaków, ale nadal program zamyka się dopiero po wpisaniu w obydwie liczby zera - a chciałbym aby wystarczyło wpisać jedno zero. Aktualny kod: #include <iostream>
int a, b, wynik, dzialanie; bool aP; bool bP;
int main()
{ do { std::cout << "Wynik wynosi : " << wynik << std::endl; std::cin.clear(); std::cin.sync(); do { std::cout << "Podaj pierwsza liczbe : " << std::endl; std::cin >> a; aP = std::cin.good(); std::cin.clear(); std::cin.sync(); } while( aP != 1 ); do { std::cout << "Podaj druga liczbe : " << std::endl; std::cin >> b; bP = std::cin.good(); std::cin.clear(); std::cin.sync(); } while( bP != 1 ); if(( a != 0 ) &&( b != 0 ) ) { std::cout << "Wybierz dzialanie: \n [1] - Dodawanie | \n [2] - Odejmowanie | \n [3] - Mnozenie | \n [4] - Dzielenie | \n [5] - Rezygnuje |" << std::endl; std::cin >> dzialanie; } if(( a != 0 ) &&( b != 0 ) ) { switch( dzialanie ) { case 1: wynik = a + b; std::cout << "Obliczam \n"; std::cout << a << " + " << b << " = " << wynik << std::endl; break; case 2: wynik = a - b; std::cout << "Obliczam \n"; std::cout << a << " - " << b << " = " << wynik << std::endl; break; case 3: wynik = a * b; std::cout << "Obliczam \n"; std::cout << a << " * " << b << " = " << wynik << std::endl; break; case 4: wynik = a / b; std::cout << "Obliczam \n"; std::cout << a << " / " << b << " = " << wynik << std::endl; break; case 5: std::cout << "Zrezygnowales!" << std::endl; return 0; break; default: std::cout << "Cos zepsules - sprobuj jeszcze raz!" << std::endl; break; } } } while(( a != 0 ) ||( b != 0 ) ); return 0; }
|
|
darko202 |
» 2018-03-27 14:14:20 zastanów się ? co muszę sprawdzić po wyjściu z pętli pobierania pierwszej liczby ? przed wejściem w drugą pętlę pobierania drugiej liczby i przerwać to wejście
np. if (....)
|
|
struś Temat założony przez niniejszego użytkownika |
» 2018-03-27 17:28:31 Rzeczywiście - wystarczyło wpisać ten kod po pętlach w której wprowadzam i sprawdzam liczbę. Tak proste rozwiązanie, że sam bym na to nigdy nie wpadł :D Dzięki wielkie. if( a == 0 ) { std::cout << "Koniec programu."; return 0; }
|
|
« 1 » |