• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Żółtodziób i jego prosty kalkulator w C++ ; Prośba o ocenę

VPS Starter Arubacloud
+1 głos
4,314 wizyt
pytanie zadane 27 września 2016 w C i C++ przez Genuine Genius Nowicjusz (230 p.)

Witam,

od kilku dni w wolnym czasie przerabiam sobie jeden z darmowych kursów online dotyczących języka C++. Doszedłem do zadania, w którym mam napisać prosty kalkulator służący do dodawania/odejmowania/dzielenia/mnożenia dwóch liczb. Jako że jestem totalnie nowy, proszę o naprowadzenie mnie na dobrą drogę i ocenę moich wypocin.

Najbardziej interesuje mnie czy warunek z komentarzem mógłby być prostszy + przy wpisywaniu np. liter do działań (zamiast liczb) wyświetla się komentarz o błędzie, ale działania z 'switcha' są liczone i wypisywane, więc przypisałem w wypadku błędu zmiennym wartość 0, żeby nie wypisywało mi głupot w konsoli... Jak mogę to lepiej zrobić?

#include <iostream>
using namespace std;
int main()
{
    float liczba1, liczba2;
    int menu;
    float wynik = 0;

        do
     {
        cin.clear();
        cin.sync();

        cout << "Obecny wynik to " << wynik << endl << endl;
        cout << "Wybierz dzialanie" << endl << endl;
        cout << "   [1] Dodawanie" << endl;
        cout << "   [2] Odejmowanie" << endl;
        cout << "   [3] Mnozenie" << endl;
        cout << "   [4] Dzielenie" << endl;
        cout << "   [5] Wyjscie" << endl << endl;

        cin >> menu;
        cout << endl;

        if(1 == menu || 2 == menu || 3 == menu || 4 == menu)  // Jaki warunek bylby tutaj odpowiedniejszy?

          {
            cout << "Wprowadz pierwsza liczbe: ";
              if (cin >> liczba1)
              {
                cout << "Wprowadz druga liczbe: ";
                    if (cin >> liczba2)
                    cout << endl;
                    else
                    {
                        cout << "Blad! Sprobuj ponownie." << endl;
                        liczba1 = 0; // Aby wyzerowac poprzednio wczytana liczbe?
                    }
              }
            else
            {
                cout << "Blad! Sprobuj ponownie." << endl;
                liczba2 = 0; // Aby liczba2 nie miala losowej wartosci przy nieprawidlowym wczytaniu liczby1? Co powinienem w takim przypadku uzyc?
            }
          }

        switch(menu)

        {
            case 1:
                wynik = liczba1 + liczba2;
                cout << liczba1 << "+" << liczba2 << "=" << wynik << endl;
                break;

            case 2:
                wynik = liczba1 - liczba2;
                cout << liczba1 << "-" << liczba2 << "=" << wynik << endl;
                break;

            case 3:
                wynik = liczba1 * liczba2;
                cout << liczba1 << "*" << liczba2 << "=" << wynik << endl;
                break;

            case 4:
                wynik = liczba1 / liczba2;
                cout << liczba1 << "/" << liczba2 << "=" << wynik << endl;
                break;

            case 5:
                return 0;
                break;

            default:
                cout << "Wprowadzono bledne dane. Sprobuj ponownie." << endl;
                break;
        }


    }

    while(menu != 5);

    return 0;
}

 

1
komentarz 27 września 2016 przez DragonCoder Nałogowiec (36,500 p.)
1. Prosze wywal te endl watal do "" na samym koncu /n 2. Zrob petle w nieskonczonosc for(;;) or while(true) 3. Po co te ify na poczatku? Zrob wprowadzenie liczb, pozniej wybor i jezeli liczna jest rowna 0 przy dzieleniu lub mnozeniu to wywal blad Co do formatowania, to odradzam takie wciecia robic, to znaczy coraz wieksze np. co ifa lub petle... kod zostaje tak czy siak nie czytelny
komentarz 27 września 2016 przez unknown Nałogowiec (39,560 p.)

jest rowna 0 przy dzieleniu lub mnozeniu to wywal blad

Dlaczego przy mnożeniu ma uważać na 0?

 

komentarz 27 września 2016 przez DragonCoder Nałogowiec (36,500 p.)
Bo to i tak zero.... naucze 2-latka przez zero w minute mnozyc....
komentarz 27 września 2016 przez unknown Nałogowiec (39,560 p.)

Bo to i tak zero.... naucze 2-latka przez zero w minute mnozyc....

Ale to nie jest powód dla którego miałby "wywalać" błąd.

komentarz 27 września 2016 przez DragonCoder Nałogowiec (36,500 p.)
Ok to niech wypisze takie zdanie: kazda liczba mnozona przez zeto lub zero mnozone przez liczbe da ten sam wynin, czyli 0.... Lepiej?
komentarz 27 września 2016 przez unknown Nałogowiec (39,560 p.)
A nie prościej po prostu pokazać wynik niż bawić się w sprawdzanie jakiś warunków?
komentarz 27 września 2016 przez DragonCoder Nałogowiec (36,500 p.)
Dla jednego tak, a dla drugiego to nauka....
komentarz 27 września 2016 przez Genuine Genius Nowicjusz (230 p.)
Co do pkt 3 - chodzi o np tego if'a?

   "if (cin >> liczba2)...."

Dodałem je żeby zabezpieczyć kalkulator przed wybieraniem liter zamiast cyfr do działań.

W jaki inny sposób wywalić błąd przy wpisywaniu liter?

I dzięki za odpowiedź, zastosuję się do wskazówek i później wrzucę poprawioną wersję :D
komentarz 27 września 2016 przez DragonCoder Nałogowiec (36,500 p.)
zamiast int uzyj char, to jest znak, obojetnie jaki ale hakis musi byc

1 odpowiedź

+3 głosów
odpowiedź 27 września 2016 przez Dash Nałogowiec (29,650 p.)

pierwszy if możesz zapisać krócej, ale za dużo to nie da. 

if(1 == menu || 2 == menu || 3 == menu || 4 == menu)
if (menu>0 && menu <5)

Walidacja wczytywanych danych jest dobra, ale troszku nieczytelna.  Największym moim zdaniem problemem jest delikatny chaos programu. Uczyłeś się już o funkcjach? Aż się prosi żeby część kodu właśnie do funkcji oddelegować.

Poza tym, to całkiem solidny kawał kalkulatora :D. 

 

komentarz 27 września 2016 przez Genuine Genius Nowicjusz (230 p.)
Jeszcze funkcji się nie uczyłem ale widzę że za niedługo się pojawią :) Na pewno wtedy wrócę do tego kalkulatorka i go zedytuję.

Dzięki za odpowiedź :]

Podobne pytania

0 głosów
2 odpowiedzi 6,129 wizyt
0 głosów
1 odpowiedź 4,719 wizyt
0 głosów
1 odpowiedź 844 wizyt

92,455 zapytań

141,263 odpowiedzi

319,100 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...