Kalkulator, wracanie do poczatku po obliczeniach

0

Hej, zamieszcze nizej kod mojego kalkulatora i chcialbym zebyscie powiedzieli mi co zrobic zeby po wybraniu dzialania i wykonaniu wybranego obliczenia program wrocil z powrotem do tabeli wyboru dzialania.

#include <iostream>
int wczytajLiczbe()
{
#include <iostream>
#include <cstdio>
using namespace std;

int dodawanie(int a, int b)
{
  return a + b;
    }
int odejmowanie(int c, int d)
{
  return c - d;
         }
int mnozenie(int e, int f)
{
  return e * f;
         }
int dzielenie(int g, int h)
  {
    return g / h;
              }


int main()
{
  int wybor;
  do
  {
  cout << " --Kalkulator-- " << endl;
  cout << "|==============|" << endl;
  cout << "|Dodawanie[1]  |" << endl;
  cout << "|Odejmowanie[2]|" << endl;
  cout << "|Mnozenie[3]   |" << endl;
  cout << "|Dzielenie[4]  |" << endl;
  cout << "|              |" << endl;
  cout << "|Wyjscie[0]    |" << endl;
  cout << "|==============|" << endl;
  cout << "Wybor: ";
  cin >> wybor;

 if(wybor == 0 )
    {
      cout << "Koniec" << endl;
      return 0;
    }
 int a1, a2;
       cout << "Podaj pierwsza liczbe: ";
       cin >> a1;
       cout << "Podaj druga liczbe: ";
       cin >> a2;

    switch(wybor)
      {
    case 1:
      {
      cout << "Wynik to: " << dodawanie(a1, a2) << endl;
      break;
           }
      case 2:
	{
	  cout << "Wynik to: " << odejmowanie(a1, a2) << endl;
	  break;
      }
      case 3:
	{
	  cout << "Wynik to: " << mnozenie(a1, a2) << endl;
        break;
      }
 case 4:
   {
   if(a1 == 0 || a2 ==0)
     {
       cout << "Probujesz podzielic zero albo przez zero..." << endl;
       break;
     }
   else;
   {
     cout << "Wynik to: " << dzielenie(a1, a2) << endl;
     break;
   }
   }
     }
  }while(wybor > 4 && wybor != 0);
}
0

Zamienić:

 while(wybor > 4 && wybor != 0);

Na:

while(wybor != 0); 
0

No tak ale wtedy jak przy wyborze dzialania wybiore liczbe wieksza od 4 to kiepsko to dziala ;c co z tym ?

0

Zmień warunek tak jak polecił kolega wyżej, a w default w switchu powiedz użytkownikowi, że wybrał złą opcję.

0

Juz zmienilem warunek, ale jak w default powiedziec uzytkownikowi ze wybral zla opcje ? O co chodzi, prosze jasniej, i gdzie dac tego defaulta dokladnie ?

0

Po ostatnim casie.

Wejście w kod znajdujący się po słowie kluczowym default nastąpi tylko wtedy, gdy żaden z case'ów nie zostanie spełniony.

0

Nie wiem, dodalem gdzies na koncu ten default, ale pewnie w zlym miejscu bo nie dziala, i czemu mam informowac uzytkownika ze wybral zla opcje skoro ja chce zeby po dzialaniu wrocil do menu, on niczego zlego nie wybiera.
a oto co zrobilem:

#include <iostream>
#include <cstdio>
  using namespace std;

  int dodawanie(int a, int b)
  {
    return a + b;
  }
  int odejmowanie(int c, int d)
  {
    return c - d;
  }
  int mnozenie(int e, int f)
  {
    return e * f;
  }
  int dzielenie(int g, int h)
  {
    return g / h;
  }


  int main()
  {
    int wybor;
      do
	{
	  cout << " --Kalkulator-- " << endl;
	  cout << "|==============|" << endl;
	  cout << "|Dodawanie[1]  |" << endl;
	  cout << "|Odejmowanie[2]|" << endl;
	  cout << "|Mnozenie[3]   |" << endl;
	  cout << "|Dzielenie[4]  |" << endl;
	  cout << "|              |" << endl;
	  cout << "|Wyjscie[0]    |" << endl;
	  cout << "|==============|" << endl;
	  cout << "Wybor: ";
	  cin >> wybor;

	  if(wybor == 0 )
	    {
	      cout << "Koniec" << endl;
	      return 0;
	    }
	  int a1, a2;
	  cout << "Podaj pierwsza liczbe: ";
	  cin >> a1;
	  cout << "Podaj druga liczbe: ";
	  cin >> a2;

	  switch(wybor)
	    {
	    case 1:
	      {
		cout << "Wynik to: " << dodawanie(a1, a2) << endl;
		break;
	      }
	    case 2:
	      {
		cout << "Wynik to: " << odejmowanie(a1, a2) << endl;
		break;
	      }
	    case 3:
	      {
		cout << "Wynik to: " << mnozenie(a1, a2) << endl;
		break;
	      }
	    case 4:
	      {
		if(a1 == 0 || a2 ==0)
		  {
		    cout << "Probujesz podzielic zero albo przez zero..." << endl;
		    break;
		  }
		else;
		{
		  cout << "Wynik to: " << dzielenie(a1, a2) << endl;
		  break;
		}default:
		std::cout << "asd" << endl;
	      }
	    }
	}while(wybor > 4 && wybor != 0);
  }

  }
  int dzielenie(int g, int h)
  {
    return g / h;
  }


  int main()
  {
    int wybor;
      do
	{
	  cout << " --Kalkulator-- " << endl;
	  cout << "|==============|" << endl;
	  cout << "|Dodawanie[1]  |" << endl;
	  cout << "|Odejmowanie[2]|" << endl;
	  cout << "|Mnozenie[3]   |" << endl;
	  cout << "|Dzielenie[4]  |" << endl;
	  cout << "|              |" << endl;
	  cout << "|Wyjscie[0]    |" << endl;
	  cout << "|==============|" << endl;
	  cout << "Wybor: ";
	  cin >> wybor;

	  if(wybor == 0 )
	    {
	      cout << "Koniec" << endl;
	      return 0;
	    }
	  int a1, a2;
	  cout << "Podaj pierwsza liczbe: ";
	  cin >> a1;
	  cout << "Podaj druga liczbe: ";
	  cin >> a2;

	  switch(wybor)
	    {
	    case 1:
	      {
		cout << "Wynik to: " << dodawanie(a1, a2) << endl;
		break;
	      }
	    case 2:
	      {
		cout << "Wynik to: " << odejmowanie(a1, a2) << endl;
		break;
	      }
	    case 3:
	      {
		cout << "Wynik to: " << mnozenie(a1, a2) << endl;
		break;
	      }
	    case 4:
	      {
		if(a1 == 0 || a2 ==0)
		  {
		    cout << "Probujesz podzielic zero albo przez zero..." << endl;
		    break;
		  }
		else;
		{
		  cout << "Wynik to: " << dzielenie(a1, a2) << endl;
		  break;
		}default:
		std::cout << "-zly wybor-" << endl;
	      }
	    }
	}while(wybor > 4 && wybor != 0);
  }
0

Nadal nie zamieniłeś

while(wybor > 4 && wybor != 0); 

na while(wybor!=0)

 
Gdy to zrobisz, program zakończy się automatycznie kiedy użytkownik wprowadzi zero. 
```cpp
 if(wybor == 0 )
        {
          cout << "Koniec" << endl;
          return 0;
        }

Ten kawałek stanie się wówczas bezużyteczny więc można go usunąć, co do defaulta , chodzi o to , że wyświetli informacje na konsole dotyczącą innego wyboru niż w Twoim przypadku liczb z przedziału 1-4 i jest to dokładnie odpowiedź na Twoje pytanie w trzecim poście.

0

Okej wszystko dziala dobrze, tylko bez wzgledu czy wpisze 0 czy liczbe wieksza od 4 to musi jeszcze raz poprosic o pierwsza i druga liczbe do dzialania. Gdzie moge umiescic te podawanie ich zebym nie musial pisac tego w kazdym casie ale zeby dzialalo we wszystkich i sie nie pojawialo kiedy nie trzeba ?

1
 #include <iostream>
#include <cstdio>
  using namespace std;

  int a1,a2;

  int dodawanie(int a, int b)
  {
    return a + b;
  }
  int odejmowanie(int c, int d)
  {
    return c - d;
  }
  int mnozenie(int e, int f)
  {
    return e * f;
  }
  int dzielenie(int g, int h)
  {
    return g / h;
  }
  void WczytajLiczby (){


      cout << "Podaj pierwsza liczbe: ";
      cin >> a1;
      cout << "Podaj druga liczbe: ";
      cin >> a2;

  }

  int main()
  {
    int wybor;

      do
    {
      cout << " --Kalkulator-- " << endl;
      cout << "|==============|" << endl;
      cout << "|Dodawanie[1]  |" << endl;
      cout << "|Odejmowanie[2]|" << endl;
      cout << "|Mnozenie[3]   |" << endl;
      cout << "|Dzielenie[4]  |" << endl;
      cout << "|              |" << endl;
      cout << "|Wyjscie[0]    |" << endl;
      cout << "|==============|" << endl;
      cout << "Wybor: ";
      cin >> wybor;


      switch(wybor)
        {
        case 1:
          {
        WczytajLiczby();
        cout << "Wynik to: " << dodawanie(a1, a2) << endl;
        break;
          }
        case 2:
          {
          WczytajLiczby();
        cout << "Wynik to: " << odejmowanie(a1, a2) << endl;
        break;
          }
        case 3:
          {
          WczytajLiczby();
        cout << "Wynik to: " << mnozenie(a1, a2) << endl;
        break;
          }
        case 4:
          {
          WczytajLiczby();
        if(a1 == 0 || a2 ==0)
          {
            cout << "Probujesz podzielic zero albo przez zero..." << endl;
            break;
          }
        else
             {
          cout << "Wynik to: " << dzielenie(a1, a2) << endl;
          break;
        }
        break;
        }
        case 0:
        break;
        default:
        {
        std::cout<<"Wybrano liczbe spoza przedziału (1-4)"<<endl;
        break;
        }
}


    }while(wybor != 0);

  }


 
0

calctest.cpp: In function ‘int main()’:
calctest.cpp2: error: case label ‘0’ not within a switch statement
case 0:
^
calctest.cpp2: error: case label not within a switch statement
default:
^
calctest.cpp8: error: expected ‘;’ before ‘}’ token
}

0

Kod wrzucony przez @mkr93 działa.

0

Wiem ale chcialem zrobic swoj nie kopiowac, i okej, z wasza pomoca skonczylem :)

#include <iostream>
#include <cstdio>
  using namespace std;

int a1, a2;

  int dodawanie(int a, int b)
  {
    return a + b;
  }
  int odejmowanie(int c, int d)
  {
    return c - d;
  }
  int mnozenie(int e, int f)
  {
    return e * f;
  }
  int dzielenie(int g, int h)
  {
    return g / h;
  }

int wczytaj(){


  cout << "Podaj pierwsza liczbe: ";
  cin >> a1;
  cout << "Podaj druga liczbe: ";
  cin >> a2;
  return 0;
}

  int main()
  {
    int wybor;
      do
	{
	  cout << " --Kalkulator-- " << endl;
	  cout << "|==============|" << endl;
	  cout << "|Dodawanie[1]  |" << endl;
	  cout << "|Odejmowanie[2]|" << endl;
	  cout << "|Mnozenie[3]   |" << endl;
	  cout << "|Dzielenie[4]  |" << endl;
	  cout << "|              |" << endl;
	  cout << "|Wyjscie[0]    |" << endl;
	  cout << "|==============|" << endl;
	  cout << "Wybor: ";
	  cin >> wybor;

	  switch(wybor)
	    {
	    case 1:
	      {
		wczytaj();
		cout << "Wynik to: " << dodawanie(a1, a2) << endl;
		break;
	      }
	    case 2:
	      {
		wczytaj();
		cout << "Wynik to: " << odejmowanie(a1, a2) << endl;
		break;
	      }
	    case 3:


	      {
		wczytaj();
		cout << "Wynik to: " << mnozenie(a1, a2) << endl;
		break;
	      }
	    case 4:
	      {
		wczytaj();
		if(a1 == 0 || a2 ==0)
		  {
		    cout << "Probujesz podzielic zero albo przez zero..." << endl;
		    break;
		  }
		else;
		{
		  cout << "Wynik to: " << dzielenie(a1, a2) << endl;
		  break;
		}
	      }
	    case 0:
	      return 0;
	    default:
	      cout << "Wybrano liczbe spoza przedzialu..." << endl;
	      break;
	    }
	}while(wybor != 0);
      return 0;
  }

No to dziekuje i temat wyczerpany :)

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