float zawsze błędny wynik

0

Przekształciłem kalkulator temperatur na kalkulator b,kb i mb. Zawsze podaje zły wynik -9.pelno cyferek. Nawet gdy ustawie jednostkę na bajty wpisze 1024, to przynajmniej rozmiar w bajtach, który przecież będzie taki sam powinien być dobry.

Zaimplementowane metody klasy:

void CBajty::UstawRozmiar(double fRozmiar, SCALE Skala)
{
	switch (Skala)
	{
	case bajty: m_fRozmiarB = fRozmiar; break;
	case kilobajty: m_fRozmiarB = fRozmiar * 1024; break;
	case megabajty: m_fRozmiarB = fRozmiar * (1024 * 1024); break;
	}
}

double CBajty::PobierzRozmiar(SCALE Skala)
{
	switch (Skala)
	{
		case bajty: return m_fRozmiarB;
		case kilobajty: return m_fRozmiarB / 1024;
		case megabajty: return m_fRozmiarB / (1024*1024);
		default: return 0;
	}
} 

Funkcja main:

 	//pobieramy rozmiar
	float fRozmiar;
	cout << "Podaj rozmiar" << endl;
	cin >> fRozmiar;

	//deklarujemy obiekt kalkulatora i przekazujemy rozmiar
	CBajty Kalkulator;
	Kalkulator.UstawRozmiar(fRozmiar, static_cast<SCALE>(chSkala));

	// pokazujemy rozmiar we wszystkich skalach
	cout << endl;
	cout << "- bajty: "
		 << Kalkulator.PobierzRozmiar(bajty) << endl
	     << "- kilobajty: "
		 << Kalkulator.PobierzRozmiar(kilobajty) << endl
		 << "- megabajty: "
		 << Kalkulator.PobierzRozmiar(megabajty) << endl;
0
float fRozmiar;
void CBajty::UstawRozmiar(double fRozmiar, SCALE Skala)

Różnica jednostek (Float, Double) ?

0

no, ale w programie, z którego korzystałem było tak samo, zmieniłem obydwa na float, potem obydwa na double i dalej tak samo

0

Co to chSkala i dlaczego to rzutujesz na enuma?

0

chSkala zmienna typu char określająca skalę czyli pojedynczy znak, u mnie jest to b, k lub m

oto część kodu programu z deklaracją tej zmiennej:

	char chSkala;
	cout << "Wybierz jednostkę:" << endl;
	cout << "(b, kb lub mb)" << endl;
	cin >> chSkala;
	if (chSkala != 'b' && chSkala != 'k' && chSkala != 'm') return;
 

rzutuje na enuma, bo robiłem to na podstawie innego programu, ale rozumiem to tak:

program pyta się użytkownika o jednostką(b, k lub m) zapisuje to w zmiennej chSkala, w funckji jako typ parametru zadeklarowany jest typ enum SCALE, więc muszę rzutować, dlaczego w funckji nie jest zadeklarowany typ parametru char? żeby można było sterować tą funkcją, gdy chSkala= b, wtedy jest rzutowana na typ SCALE, przekazywana do funkcji jako parametr SCALE Skala. I wtedy korzysta z enuma b = bajty, więc w switchu wybiera opcję bajty:

	switch (Skala)
	{
	case bajty:			m_fRozmiarB = fRozmiar; break;
	case kilobajty:		m_fRozmiarB = fRozmiar / 1024; break;
	case megabajty:		m_fRozmiarB = fRozmiar / (1024 * 1024); break;
	} 

Trochę pomotałem, ale myślę, że dobrze to rozumiem.

0

Zrób coś dla mnie, dodaj we wszystkich switchach klauzulę default:

default: cout << "ktos tu spapral enuma" << endl;
0
 enum SCALE {bajty = 'B', kilobajty = 'K', megabajty = 'M'};

nie rozumiem za bardzo co jest źle, wiem, że nie najlepiej to wszystko rozumiem, mógłbyś wytłumaczyć co w moim rozumowaniu jest źle(pewnie wszystko :D)? I jaki jest błąd w programie

1

W enumie masz wielkie litery, Ty zaś pilnujesz żeby użytkownik wprowadził małe, prawda? 'B' != 'b'.

0

dzięki wielkie, mniej więcej działa, muszę jeszcze poprawić funkcję, bo jest pewien błąd, 1024 bajtów to wg mojego programu nie 1 KB tylko 1 z częścią ułamkową, no, ale z tym się jakoś uporam, dzięki za pomoc

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