Co jest źle w kodzie.

0

Witam.
Staram się napisać program, który zamienia liczby z systemu dziesiętnego na szesnastkowy.
Mój program wyświetla liczbę szesnastkową, ale nie zamienia cyfr na litery, np. zamiast (dzies. 1000) 3E8, wyświetla 3148.
Mogę liczyć na pomoc?
Z góry dziękuje.
Poniżej kod:



#include <iostream>
using namespace std;
 void dec2hex(int liczba)
{
       char tab[31];
       int i=0 , A , B , C , D , E , F;
       while(liczba)
	      {
		    tab[i++]=liczba%16;
                    switch(tab[i])
                         {
                             case 10:
                                         {tab[i]+=55;
                                         break;}
                              case 11:
                                         {tab[i]+=55;
                                                    break;}
                             case 12:
                                         {tab[i]+=55;
                                           break;}
                             case 13:
                                         {tab[i]+=55;
                                          break;}
                             case 14:
                                          {tab[i]+=55;
                                          break;}
                             case 15:
                                         {tab[i]+=55;
                                         break;}
                          }
		liczba=liczba/16;
	}
	for (int j=i-1; j>=0;j--)
		{cout<<tab[j];}
	}
int main()
{
	int liczba;
	
         cout <<"Podaj liczbe: ";
	cin>>liczba;
	cout<<liczba<<" po zamianie na postac hexagonalna to: ";
	dec2hex(liczba);
	cout<<endl;
    return 0;
}
2

Możesz liczyć, ale sformatuj ten kod normalnie, żeby dało się go czytać.

Otwierasz:

-```cpp

Zamykasz:

-```

1

Nie używaj operatora ++ w wyrażeniach bardziej skomplikowanych niż

i++;

Przynajmniej do czasu, aż zrozumiesz jak to działa ;)

1

@Jacek Kanicki: Ten switch jest całkowicie zbędny, możesz to if'em załatwić.
Tak jak kolega wyżej mówił, zwróć uwagę na tę inkrementację przy indeksowaniu tablicy, nie wiem czy ten zabieg był celowy, a jeżeli nie to źle tego użyłeś.

i++ nie tylko da ci wartość większą o jeden od i, ale też automatycznie ta zmienna zostanie zwiększona, nie jest ona traktowana jak zmienna tymczasowa.
Zamiast tego użyj "i + 1".

0

Bracie @Jacek Kanicki czy masz jakieś przeciwwskazania co do zastosowania std::string? Jeśli nie, to zapis wyniku konwersji do stringa będzie dużo łatwiejszy.

1
  1. nazwa dec2hex jest bezsensu. Czy twój komputer używa systemu dziesiętnego (takie maszyny były i wyszły z użytku 40 lat temu)? int masz traktować jako abstrakcję liczby, która jest zapisane w systemie binarnym. Sensowniejsza nazwa: print_hex.
  2. Co to jest to 55? (domyślam się co tam miało być, ale po co zaciemniasz kod? i jest źle)
  3. Po co ci ten switch sokor w każdym case robisz dokładnie to samo? użyj stałej tablicy.
  4. Co się stało z cyframi od 0 do 9 (switch ich nie pokrywa)?
  5. po co ci nieużywane zmienne?

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