Probleme bei Umrechnung in Binärzahl



  • Hallo

    Ich beschäftige mich erst seit kurzem mit C++ und wollte nun einmal ein paar kleine Programme zur Übung schreiben.
    Leider bin ich schon bei einem Programm, welches Dezimalzahlen in Binärzahlen umwandeln soll gescheitert.
    Mein eigentliches Problem, den Integer in den String einzubinden, konnte ich, dachte ich zumindest, durch Hilfe von Google/der Forensuche lösen, doch leider spuckt das Programm Zahlen aus, die einfach nicht stimmen.
    Ein rechnerisches Problem dürfte an sich nicht vorliegen, da die Ausgabe ohne Strings, also falsch herum quasi, funktioniert.
    Wäre nett, wenn mir jemand helfen könnte, da ich keine Ahnung habe, wonach ich suchen sollte bei diesem Problem.

    #include <sstream>
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main() {
    
    	int ein=1;											// Variable für Dezimalzahl
    	int i=1;											// Zwischenspeicher für Binärzahl
    	ostringstream Str;
    	string aus = "";
    
    	cout << "Welche Zahl soll umgerechnet werden? ";
    	cin >> ein;
    
    	while (ein>0) {
    		i = ein%2;										// Binärzahl durch Restmethode
    		ein = ein/2;									// Rest als neues "ein"
    		Str << i;										// "i" wird in String "Str" umgewandelt.
    		string b(Str.str());							// ???
    		aus = b+aus;									// Binärzahl wird vorne angehangen.
    	}
    
    	cout << aus << endl;
    }
    

    Bei der Umrechnung der 3 zum Beispiel erhalte ich "111" oder bei der 6 "011010".
    Könnte mir vorstellen, dass es mit der ständigen Neudeklarierung von b zutun hat, aber eine Auslagerung aus der Schleife funktioniert bei mir nicht.



  • Triloquist schrieb:

    Könnte mir vorstellen, dass es mit der ständigen Neudeklarierung von b zutun hat, aber eine Auslagerung aus der Schleife funktioniert bei mir nicht.

    Es liegt daran, dass Str nicht ständig neu deklariert (oder zumindest geleert) wird. In deinem Stringstream bleiben die alten Werte stehen, und du holst sie jedesmal wieder mit raus.



  • Funktioniert einwandfrei, danke für die Hilfe! 👍


Anmelden zum Antworten