Konwerter jednostek C++ gdzie znajduje sie błąd ?

0

Witam serdecznie
Pracuje nad takim oto projektem konwertera jednostek, po wyborze typu przeliczanej jednostki program nie dokonuje jej przeliczania. Nie wiem gdzie leży błąd ;-/ Proszę was o pomoc.
Niestety nie mogę dodać załącznika wiec poniżej wklejam kod.

#include <iostream>
#include <cstdlib>
using namespace std;
void funkcja_predkosc()
{
    while(1)
	{
		cout << "1: km/h -> ms/s" << endl;
		cout << "2: sek -> min" << endl;
		cout << "--POWROT (q)--" << endl;

		char tryb; cin >> tryb;

		double zmienna_predkosci;

		switch(tryb)
		{
			case 1:
				{
				cout << "km/h: ";
				cin >> zmienna_predkosci;
				cout << endl;
				cout << "m/s: " << zmienna_predkosci * 0.27 << endl;
				break;
				}
			case 2:
				cout << "m/s: ";
				cin >> zmienna_predkosci;
				cout << endl;
				cout << "km/h: " << zmienna_predkosci / 0.27 << endl;
				break;

		}
	}
}
void funkcja_czas()
{
	while(1)
	{
		cout << "1: min -> sek" << endl;
		cout << "2: sek -> min" << endl;
		cout << "--POWROT (q)--" << endl;

		char tryb; cin >> tryb;

		double zmienna_czasu;

		switch(tryb)
		{
			case 1:
				{
				cout << "min: ";
				cin >> zmienna_czasu;
				cout << endl;
				cout << "sek: " << zmienna_czasu * 60 << endl;
				break;
				}
			case 2:
				cout << "sek: ";
				cin >> zmienna_czasu;
				cout << endl;
				cout << "min: " << zmienna_czasu / 60 << endl;
				break;

		}
	}
}
void funkcja_waluta()
{
   while(1)
	{
		cout << "1: zl -> euro" << endl;
		cout << "2: euro -> zl" << endl;
		cout << "--POWROT (q)--" << endl;

		char tryb; cin >> tryb;

		double zmienna_waluty;

		switch(tryb)
		{
			case 1:
				{
				cout << "zl: ";
				cin >> zmienna_waluty;
				cout << endl;
				cout << "euro: " << zmienna_waluty * 0.24 << endl;
				break;
				}
			case 2:
				cout << "euro: ";
				cin >> zmienna_waluty;
				cout << endl;
				cout << "zl: " << zmienna_waluty / 0.24 << endl;
				break;

		}
	}
}
void funkcja_masa()
{
	while(1)
	{
		cout << "1: g -> kg" << endl;
		cout << "2: kg -> g" << endl;
		cout << "--POWROT (q)--" << endl;

		char tryb; cin >> tryb;

		double zmienna_masy;

		switch(tryb)
		{
			case 1:
				{
				cout << "g: ";
				cin >> zmienna_masy;
				cout << endl;
				cout << "kg: " << zmienna_masy * 0.001 << endl;
				break;
				}
			case 2:
				cout << "euro: ";
				cin >> zmienna_masy;
				cout << endl;
				cout << "zl: " << zmienna_masy / 0.001 << endl;
				break;

		}
	}
}
void funkcja_objetosc()
{
	while(1)
	{
		cout << "1: m^3 -> dm^3" << endl;
		cout << "2: dm^3 -> m^3" << endl;
		cout << "--POWROT (q)--" << endl;

		char tryb; cin >> tryb;

		double zmienna_masy;

		switch(tryb)
		{
			case 1:
				{
				cout << "m^3: ";
				cin >> zmienna_masy;
				cout << endl;
				cout << "m^3: " << zmienna_masy * 1000 << endl;
				break;
				}
			case 2:
				cout << "m^3: ";
				cin >> zmienna_masy;
				cout << endl;
				cout << "m^3: " << zmienna_masy / 1000 << endl;
				break;

		}
	}
}
void funkcja_dlugosc()
{
	while(1)
	{
		cout << "1: mm -> m" << endl;
		cout << "2: m -> mm" << endl;
		cout << "--POWROT (q)--" << endl;

		char tryb; cin >> tryb;

		double zmienna_dlugosci;

		switch(tryb)
		{
			case 1:
				{
				cout << "mm: ";
				cin >> zmienna_dlugosci;
				cout << endl;
				cout << "m: " << zmienna_dlugosci * 0.001 << endl;
				break;
				}
			case 2:
				cout << "m: ";
				cin >> zmienna_dlugosci;
				cout << endl;
				cout << "mm: " << zmienna_dlugosci / 0.001 << endl;
				break;

		}
	}
}
void funkcja_temperatura()
{
	while(1)
	{
		cout << "1: stopnie celsjusza -> kelwiny" << endl;
		cout << "2: kelwiny -> stopnie celsjusza" << endl;
		cout << "--POWROT (q)--" << endl;

		char tryb; cin >> tryb;

		double zmienna_stopni;

		switch(tryb)
		{
			case 1:
				{
				cout << "stopnie celsjusza: ";
				cin >> zmienna_stopni;
				cout << endl;
				cout << "kelwiny: " << zmienna_stopni * 274.15 << endl;
				break;
				}
			case 2:
				cout << "kelwiny: ";
				cin >> zmienna_stopni;
				cout << endl;
				cout << "stopnie celsjusza: " << zmienna_stopni / 274.15 << endl;
				break;

		}
	}
}
int main(int argc, char const *argv[])
{
	while(1)
	{
		cout << "Kowekter tryb: predkosc (p)" << endl;
		cout << "Kowekter tryb: czas (c)" << endl;
		cout << "Kowekter tryb: walute (w)" << endl;
		cout << "Kowekter tryb: mase (m)" << endl;
		cout << "Kowekter tryb: objetosc (o)" << endl;
		cout << "Kowekter tryb: dlugosc (d)" << endl;
		cout << "Kowekter tryb: temperature (t)" << endl;
		cout << "----------WYJSCIE (q)---------" << endl;

		char tryb; cin >> tryb;
		switch(tryb)
		{
			case 'p': funkcja_predkosc();
				break;
			case 'c': funkcja_czas();
				break;
			case 'w': funkcja_waluta();
				break;
			case 'm': funkcja_masa();
				break;
			case 'd': funkcja_dlugosc();
				break;
			case 'o': funkcja_objetosc();
				break;
			case 't': funkcja_temperatura();
				break;
			default:
				exit(0);
		}
	}
	return 0;
}
1

tryb jest typu char, a w case'ach wpisujesz int. Dodaj default i wypisz tryb jako liczbę, zobaczysz co się stanie.
char traktowane jako liczba to kod ASCII http://en.cppreference.com/w/cpp/language/ascii
Musisz zmienić typ zmiennej na int, albo pisać case '1': itd.

2

Nie odnosisz wrażenia, że Twój kod to jedno, wielkie kopiuj-wklej?

1

Być może zainteresuje cię bardziej generyczne podejście do problemu: https://dsp.krzaq.cc/post/247/bezpieczna-zamiana-jednostek-w-cxx-czesc-1/

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