[C++] Prosty kalkulator


(Kuba Madej) #1

Siemanko.

Napisałem prosty kalkulator w C++ i chciałbym byście powiedzieli mi co zrobiłem źle. Wszystko wyświetla się dobrze lecz wyniki są bajeczne. Przykład to np.: 6 + 6 = 123124435344 itp. . Proszęo pomoc w sprostowaniu kodu lub wyjaśnienia.

Ps. Jestem dopiero w trakcie nauki więc proszę o nie wyśmiewanie się.

#include 

#include 


int main()


	{


		menu:


		int wybor;


		std::cout << "Witamy w kalkulatorze !" << "\n" << "Wybierz dzialania jakie chcesz wykonac: \n";

		std::cout << "1. Dodawanie \n";

		std::cout << "2. Odejmowanie \n";

		std::cout << "3. Mnozenie \n";

		std::cout << "4. Dzielenie \n";

		std::cout << "5. Wyliczanie sredniej \n";


		std::cin >> wybor;




		switch(wybor)

			{

				////// DEKLARACJA DANYCH ////////////////////////////////////

				double pierwsza;

				double druga;

				double wynik;

				////// KONIEC DEKLARACJI DANYCH //////////////////////////



				case 1:




				wynik = pierwsza + druga;


				std::cout << "Wpisz pierwsza liczbe - ";

				std::cin >> pierwsza;

				std::cout << "\n Wpisz druga liczbe - ";

				std::cin >> druga;

				std::cout << "Wynikiem dodawania liczby " << pierwsza << " oraz " << druga << " jest " << wynik << "/n";

				break;



				case 2:



					wynik = pierwsza - druga;


				std::cout << "Wpisz pierwsza liczbe - ";

				std::cin >> pierwsza;

				std::cout << "\n Wpisz druga liczbe - ";

				std::cin >> druga;

				std::cout << "Wynikiem dodawania liczby " << pierwsza << " oraz " << druga << " jest " << wynik << "/n";

				break;



				case 3:



					wynik = pierwsza * druga;


				std::cout << "Wpisz pierwsza liczbe - ";

				std::cin >> pierwsza;

				std::cout << "\n Wpisz druga liczbe - ";

				std::cin >> druga;

				std::cout << "Wynikiem dodawania liczby " << pierwsza << " oraz " << druga << " jest " << wynik << "/n";

				break; 




				case 4:



					wynik = pierwsza / druga;


				std::cout << "Wpisz pierwsza liczbe - ";

				std::cin >> pierwsza;

				std::cout << "\n Wpisz druga liczbe - ";

				std::cin >> druga;

				std::cout << "Wynikiem dodawania liczby " << pierwsza << " oraz " << druga << " jest " << wynik << "/n";

				break;




				case 5:



					wynik = (pierwsza + druga) / 2;


				std::cout << "Wpisz pierwsza liczbe - ";

				std::cin >> pierwsza;

				std::cout << "\n Wpisz druga liczbe - ";

				std::cin >> druga;

				std::cout << "Wynikiem dodawania liczby " << pierwsza << " oraz " << druga << " jest " << wynik << "/n";

				break;



				} 

				std::cout << "\n" << "\n";


				goto menu;


				system("pause");


	}


[/code]

Pozdrawiam :smiley:

Kuba


(Razi) #2
switch(wybor)

         {

            ////// DEKLARACJA DANYCH ////////////////////////////////////

            double pierwsza;

            double druga;

            double wynik;

Pierwszy raz widzę takie użycie klamer switcha. Zadeklaruj te liczby przed. Zauważ też, że w każdym case wczytujesz obie liczby, nie lepiej je wczytać przed nim? Zaoszczędzisz sporo kodu.

Kod wykonuje się linijka po linijce, jak zapiszesz “wynik = pierwsza + druga;” w momencie gdy pierwsza' idruga’ nie są jeszcze wczytane, otrzymasz śmieci. Najpierw wczytaj, potem wykonaj działania.


(Walkiria 84) #3

możesz też spróbować

.

.

.

std::cin >> wybor;


double pierwsza;

double druga;

double wynik;


std::cout << "Wpisz pierwsza liczbe - ";

std::cin >> pierwsza;

std::cout << "\n Wpisz druga liczbe - ";

std::cin >> druga;

wynik = 0; // dodatkowe zabezpieczenie przed śmieciami - można pominąć


switch(wybor)

{

case 1:

wynik = pierwsza + druga;

std::cout << "Wynikiem dodawania liczby " << pierwsza << " oraz " << druga << " jest " << wynik << "/n";

break;


case 2:

.

.

.

([alex]) #4

Czemu nie zrobić tego prościej i jednocześnie wygodniej dla użytkownika:

cout<<"Podaj wyrażenie (liczba operacja liczba): ";

double a,b;

char op;

if(cin>>a>>op>>b)

  {

   switch(op)

     {

      case '+': cout<
      ...

      default: cout<<"Nieznana operacja"<
     }

  }

else

  {

   cin.clear();

   while(cin.get()!='\n') break;

   cout<<"Niepoprawne wyrażenie"<
  }[/code]

(John Clawe) #5

Problem złych wyników tkwi w kolejności wykonywania operacji.

Poprawnie powinno być tak jak poniżej.

Najpierw pytasz a wartości zmiennych pierwsza i druga dopiero potem liczysz wynik.

//...  

            std::cout << "Wpisz pierwsza liczbe - ";

            std::cin >> pierwsza;

            std::cout << "\n Wpisz druga liczbe - ";

            std::cin >> druga;


            wynik = pierwsza + druga;


            std::cout << "Wynikiem dodawania liczby " << pierwsza << " oraz " << druga << " jest " << wynik << "/n";

            //...