Problem - Kalkulator w C++

0

Witam,
jestem początkującym w C++ i chciałem napisać kalkulator, coś tam się napisało, ale działa tylko opcja dodawania, w reszcie pojawiają się wyniki z kosmosu:

#include<iostream>
int main()
{
poczatek:
    std::cout<<"Aby dodawac nacisnij '1', aby odejmowac '2', aby pomnozyc '3', aby podzielic '4'"<<std::endl;
    int znak;
    std::cin>>znak;
    switch(znak)
    {
        case 1:
        unsigned long a, b, c;
        std::cin>>a;
        std::cout<<" + ";
        std::cin>>b;
        c = a + b;
        std::cout<<" = "<<c<<std::endl;
        goto poczatek;
        
        case 2:
        unsigned long d, e, f;
        std::cin>>d;
        std::cout<<" - ";
        std::cin>>e;
        f = d - e;
        std::cout<<" = "<<c<<std::endl;
        goto poczatek; 
        
        case 3:
        unsigned long g, h, i;
        std::cin>>g;
        std::cout<<" x ";
        std::cin>>h;
        i = g * h;
        std::cout<<" = "<<c<<std::endl;
        goto poczatek; 
        
        case 4:
        unsigned long j, k, l;
        std::cin>>j;
        std::cout<<" : ";
        std::cin>>k;
        l = j / k;
        std::cout<<" = "<<c<<std::endl;
        goto poczatek;
        
        default:
        std::cout<<"Wpisany przez ciebie znak nie jest jednym z wyzej wymienionych znakow"<<std::endl;
        goto poczatek;
    }
}

Proszę o wyrozumiałość, dopiero się uczę :)

0

W pozostałych działaniach wypisujesz "c" - zmienna do ktorej jest przypisany wynik dodawania a która nie ma nic wspolnego z reszta case'ow.
Popraw cout dla pozostałych działań.

Czyli dla odejmowania powinno być std::cout<<" = "<<f<<std::endl;

0

Ale ze mnie gapa xP
Dzięki za odpowiedź :)

0

Topik ma już 2 godziny, a nikt jeszcze uwagi nie zwrócił :/
Nieładnie :/

Zwrócę ja: NIE UŻYWAJ GOTO.

Zapewne padłoby teraz wiekopomne zapytanie: "ale dlaczego nie...?"

A oto odpowiedź:

#include<iostream>
int main()
{
	while(true)
	{
		std::cout<<"Aby dodawac nacisnij '1', aby odejmowac '2', aby pomnozyc '3', aby podzielic '4'"<<std::endl;
		int znak;
		std::cin>>znak;
		
		unsigned long a, b, c;
		char tab_znaki[4] = {'+', '-', 'x', ':'};
		
		cin >> a;
		cout << tab_znaki[znak];
		cin >> b;
		
		switch(znak)
		{
			case 1:
				c = a + b;
     
			case 2:
				c = a - b;
				
			case 3:
				c = a * b;
			
			case 4:
				c = c / b;
       
			default:
				std::cout<<"Wpisany przez ciebie znak nie jest jednym z wyzej wymienionych znakow"<<std::endl;
        
		}
		std::cout<<" = "<<c<<std::endl;
	}
}

Mam nadzieję, że widzisz, dlaczego nie ;)

0

Nie powinno być :
cout << tab_znaki[znak-1];
?

0

Powinno być. Ale ważniejszy jest brak breaków w switchu;)

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