C + +. Kalulator - proszę o spr. !

0

Witam,
prosze Was serdecznie o sprawdzenie poprawności kodu, wyskakuje mi błąd gdy za liczbę a wpisuję 10, a za b 0. Program wyłącza się i nie chce dalej liczyć. Prosze zweryfikujcie czy kod jest poprawny...

 
#include<iostream>
using namespace std;
int main()
{
    int a , b ; 
    int wybor ;
              cout<<" K A L K U L A T O R ! "<<endl;
    POCZATEK:
    cout<<"Wprowadz liczbe a..."<<endl;
    cin>>a;
    
    cout<<"Wprowadz liczbe b..."<<endl;
    cin>>b;
    
              cout<<" M E N U  W Y B O R U: "<<endl;
    cout<<"[1] Wykonaj dzialanie dodawania a+b."<<a+b<<endl;
    cout<<"[2] Wykonaj dzialanie odejmowania a-b."<<a-b<<endl;
    cout<<"[3] Wykonaj dzialadnie mnozenia a*b."<<a*b<<endl;
    cout<<"[4] Wykonaj dzialanie dzielenia a/b."<<a/b<<endl;
    cout<<"[5] Podaj reszte z dzielenia a%b."<<a%b<<endl;
    
               cout<<"Ktora z opcji wybierasz?"<<endl;
               cin>>wybor;
               switch(wybor)
                            {
                            case 1:
                                 cout<<"Wybrales opcje nr..: "<<wybor<<" ,wynik to..: "<<a+b<<endl;
                                 break;
                            case 2:
                                 cout<<"Wybrales opcje nr..: "<<wybor<<" ,wynik to..: "<<a-b<<endl;
                                 break;  
                            case 3:
                                 cout<<"Wybrales opcje nr..: "<<wybor<<" ,wynik to..: "<<a*b<<endl;
                                 break;        
                            case 4:
                                 if(b==0)
                                 cout<<"Nie pamietasz? Nie dzielimy przez zero!"<<endl;
                                 else
                                 cout<<"Wybrales opcje nr..: "<<wybor<<" ,wynik to..: "<<a/b<<endl;
                                 break;   
                            case 5:
                                 if(b==0)
                                 cout<<"Nie pamietasz? Nie dzielimy przez zero!"<<endl;
                                 else
                                 cout<<"Wybrales opcje nr..: "<<wybor<<" ,wynik to..: "<<a%b<<endl;
                                 break;          
                                 }    
    cout<<"Czy chcesz dalej wykonwywac obliczenia? T-TAK, N-NIE?"<<endl;
    char decyzja;
    cin>>decyzja;
    
    if(decyzja=='T' || decyzja=='t')
    goto POCZATEK;
    system ("PAUSE");
return(0);
}
0
goto POCZATEK;

Program jest napisany źle.

0

A mógłbyś mi powiedzieć w czym tkwi problem?

0

Używanie goto jest złem, ale problem jest w tym, że dzielisz przez 0.
Po co wybór, skoro podajesz wyniki wszystkich działań od razu?

0
byku_guzio napisał(a)

Używanie goto jest złem, ale problem jest w tym, że dzielisz przez 0.
Po co wybór, skoro podajesz wyniki wszystkich działań od razu?

Nie podaje wynikow od razu, wyswietla wynik dla wybranej opcji. A goto uzylam, zeby program zapetlal do poczatku, po pokazaniu jednego z obliczen. Chodzi mi o to, ze gdy dziele przez zero nie wyswietla mi komunikatu, aby nie dzielic przez zero, tylko program zawiesza sie i wylacza.(Używam Dev C++)

0

w linijce

cout<<"[4] Wykonaj dzialanie dzielenia a/b."<<a/b<<endl;

dla każdego b wykonujesz dzielenie, niezależnie od tego którą opcję się wybierze. I dla zera się wysypuje.

Poza tym nie używaj system("pause")

 podobnie jak nie używaj goto. dodaj
```cpp
#include<cstdio>

i zamiast system("pause") daj

getchar();
0

Nadal nie wiem czym zastąpić goto? I co zrobić, żeby przy dzieleniu przez zero wyświetlało komunikat: "nie dziel przez zero!'

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    int a , b ; 
    int wybor ; 
    poczatek:
    cout<<" Wprowadz liczbe A ";
    cin>>a;
    cout<<" Wprowadz liczbe B ";
    cin>>b;
    
    cout<<" Liczba A to "<<a<<endl;
    cout<<" Liczba B to "<<b<<endl;
    
    cout<<" MENU WYBORU "<<endl;
    cout<<" [1] -oblicz sume: a+b "<<a+b<<endl;
    cout<<" [2] -oblicz roznice: a-b "<<a-b<<endl;
    cout<<" [3] -oblicz iloczyn: a*b "<<a*b<<endl;
    cout<<" [4] -oblicz iloraz: a/b "<<a/b<<endl;
    cout<<" [5] -roznica dzielenia: a%b "<<a%b<<endl;
    
    cout<<"Wybierz opcje 1-5..."<<endl;
    cin>>wybor;
    switch(wybor)
    {
    case 1:
         cout<<" Wybrales opcje nr: "<<wybor<<" ,wynik to: "<<a+b<<endl;
    break;
    case 2:
         cout<<" Wybrales opcje nr: "<<wybor<<" ,wynik to: "<<a-b<<endl;
    break;     
    case 3:
         cout<<" Wybrales opcje nr: "<<wybor<<" ,wynik to: "<<a*b<<endl;
    break;
    case 4:
         if(b==0)
         cout<<" Nigdy nie dziel przez 0!"<<endl;
         else
         cout<<" Wybrales opcje nr: "<<wybor<<" ,wynik to: "<<a/b<<endl;
         break;
    case 5:
         if(b==0)
         cout<<" Nigdy nie dziel przez 0!"<<endl;
         else
         cout<<" Wybrales opcje nr: "<<wybor<<" ,wynik to: "<<a/b<<endl;
         break;
}
         cout<<"Czy chcesz obliczac dalej? T/N?"<<endl;
         char znak;
         cin>>znak;
         
         if(znak=='T')
         goto poczatek;
         
         getchar();
         return(0);
         }
 
0
Azarien napisał(a)

w linijce

cout<<"[4] Wykonaj dzialanie dzielenia a/b."<<a/b<<endl;

dla każdego b wykonujesz dzielenie, niezależnie od tego którą opcję się wybierze. I dla zera się wysypuje.

Poza tym nie używaj system("pause")

 podobnie jak nie używaj goto. dodaj
> 
```cpp
#include<cstdio>

i zamiast system("pause") daj

getchar();

Lepiej nie mieszać iostream'ów z stdlibem. Niech użyje cin.flush(); cin.get();

0
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    int a , b ;
    int wybor ;
    char znak;
    do
    {
        cout<<" Wprowadz liczbe A ";
        cin>>a;
        cout<<" Wprowadz liczbe B ";
        cin>>b;

        cout<<" Liczba A to "<<a<<endl;
        cout<<" Liczba B to "<<b<<endl;

        cout<<" MENU WYBORU "<<endl;
        cout<<" [1] -oblicz sume: a+b "<<endl;
        cout<<" [2] -oblicz roznice: a-b "<<endl;
        cout<<" [3] -oblicz iloczyn: a*b "<<endl;
        cout<<" [4] -oblicz iloraz: a/b "<<endl;
        cout<<" [5] -reszta dzielenia: a%b "<<endl;

        cout<<"Wybierz opcje 1-5..."<<endl;
        cin>>wybor;
        switch(wybor)
        {
        case 1:
            cout<<" Wybrales opcje nr: "<<wybor<<" ,wynik to: "<<a+b<<endl;
            break;
        case 2:
            cout<<" Wybrales opcje nr: "<<wybor<<" ,wynik to: "<<a-b<<endl;
            break;
        case 3:
            cout<<" Wybrales opcje nr: "<<wybor<<" ,wynik to: "<<a*b<<endl;
            break;
        case 4:
            if(b==0)
                cout<<" Nigdy nie dziel przez 0!"<<endl;
            else
                cout<<" Wybrales opcje nr: "<<wybor<<" ,wynik to: "<<a/b<<endl;
            break;
        case 5:
            if(b==0)
                cout<<" Nigdy nie dziel przez 0!"<<endl;
            else
                cout<<" Wybrales opcje nr: "<<wybor<<" ,wynik to: "<<a/b<<endl;
            break;
        }
        cout<<"Czy chcesz obliczac dalej? T/N?"<<endl;
        cin>>znak;
    }
    while(znak=='T');

    cin.sync();
    cin.get();
    return 0;
}
0

Zamiast goto użyj pętli. I dzielisz przez 0! Nawet Azarien podał Ci dokładnie w którym miejscu...

0

Wszystko gra...
Dziękuję bardzo za pomoc! Pozdrawiam ciepło! ;)

/Tylko jeszcze wytłumaczcie mi co oznacza polecenie: cin.sync()

0

Ban na dokumentacje?

Synchronizes the buffer associated with the stream to its controlled input sequence. This effectively means that the unread characters in the buffer are discarded.

http://www.cplusplus.com/reference/iostream/istream/sync/

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