Prosty kalkulator - niepoprawne rozwiązanie.

0

Witam,
Mam pewien problem z zadaniem z SPOJ:

CALC - Kalkulator
Napisz program, który działa jak prosty kalkulator obsługujący pięć operacji: dodawanie, odejmowanie, mnożenie, dzielenie i obliczanie reszty z dzielenia liczb całkowitych.

Wejście
Na wejście programu podana zostanie pewna nieokreślona liczba zestawów danych. Zestawy składają się z jednoznakowego symbolu operacji do wykonania (+ dodawanie, - odejmowanie, * mnożenie, / dzielenie całkowitoliczbowe, % reszta z dzielenia) oraz następujących po nim dwóch liczb całkowitych. Poszczególne składowe zestawu zostaną rozdzielone spacjami, a same zestawy znakiem nowej linii. Liczba testów nie przekracza 100, wynik zawiera się w typie int32.

Wyjście
Na wyjściu programu ma się pojawić ciąg liczb będących rezultatem wykonania pojawiających się na wejściu poleceń. Poszczególne liczby należy rozdzielić znakami nowej linii. Uwaga! Można założyć, że dane wejściowe nie zawierają polecenia dzielenia przez 0.

Przykład
Wejście:

  • 7 9
  • 0 4
  • 5 6
    / 8 3
    % 5 2

Wyjście:
16
-4
30
2
1

A oto moje rozwiązanie:

 #include <iostream>
#include <conio.h>


using namespace std;

int main()
{
long  int a, b;
char dzialanie;



   for(int i=0;i<=100;i++)
   {
       cout<<endl;
       dzialanie = getch();
       cin>>a>>b;


       switch(dzialanie)
       {
        case '+': {cout<<endl<<a+b;} break;
        case '-': {cout<<endl<<a-b;} break;
        case '*': {cout<<endl<<a*b;} break;
        case '/': {
            if(b!=0){cout<<endl<<a/b;}
            else cout<<"Nie dzielimy przez zero";
                   } break;
        case '%': {cout<<endl<<a%b;} break;
        default: cout<<endl<<"Brak dzialania"; break;
       }
   }
    return 0;
}

Mogłby mi ktoś wyjasnic co robie zle?

1
  1. Znak i liczby mają być wprowadzane w nieskończonej pętli:
while(std::cin>>dzialanie>>a>>b){
  //tu kod
}
  1. Po co sprawdzasz przy dzieleniu, czy b != 0. Przecież w treści zadania pisze:

Uwaga! Można założyć, że dane wejściowe nie zawierają polecenia dzielenia przez 0.

  1. Po co ten default
  2. Poćwicz nad formatowaniem kodu.
0
        cin>>a>>b;
 

Aby na pewno dobrze program pobiera dane? Czy znak nowego wiersza nie przeszkadza w pobraniu nowych danych i czy obiekt cin nie wczytuje przypadkiem spacji i konwertuje ich na typ int? Mogę się mylić :-)

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