Binärcode über ein return zurückgeben
-
Hi,
ich hoffe ihr könnt mir helfen. Und zwar habe ich eine Funktion geschrieben die alle integer Werte in Binär umrechnet. Die binäre Zahl ist vom Typ StringDas Problem ist ich bekomme immer eine Absturzmeldung und ich weis nicht wo dran es liegt.
Hier der Code
#include <iostream> #include <stdlib.h> using namescpade std; string binary(int x, string y){ int temp = 0; if(x < 0 || x == 0){ cout << y; return y; }else{ temp = x; if(x % 2 == 0){ y = "0" + y; temp = int(temp) / 2; }else{ y = "1" + y; temp = float(temp) / 2 - 0.5; } } binary(temp, y); } int main(){ int num = 0; string bcd; cout << "Enter a number :"; cin >> num; cout << "The binary number is: "; cout << binary(num, bcd)<<endl; }
-
Ließt du dir eigentlich gar nicht die Warnungen durch? Ich kriege diese Warnung: warning C4715: 'binary' : not all control paths return a value
Vermutlich wolltest du in der letzten Zeile von der binary Funktion ein return binary(temp, y); schreiben. Dann funktioniert auch alles und es gibt keinen Absturz.
Die Geschichte mit temp = float(temp) / 2 - 0.5; kannst du dir übrigens sparen. Ein einfaches temp = temp/2 reicht, da bei einer ganzzahligen Division sowieso immer abgerundet wird. Wie kommst du überhaupt auf das int(temp)? Deine temp Variable ist doch schon int.
-
bisschen wenig returns in binary und main - oder?
-
Ok das hatte ich ehrlich gesagt nicht vorgehabt aber du hast recht es klappt jetzt.
Das mit dem int(temp) ist die, das ich den Code von Python zu C++ konvertieren wollte.
Trotzdem danke
-
Gast3 es ging sich ja auch mher um die Funktion binary. Das problem hat sich jetzt geklärt

-
Oder vermutlich wolltest du eher sowas schreiben:
string binary(int x, string& y) { int temp = 0; if(x < 0 || x == 0) { //cout << y; return y; } else { temp = x; if(x % 2 == 0) { y = "0" + y; temp = int(temp) / 2; } else { y = "1" + y; temp = float(temp) / 2 - 0.5; } } binary(temp, y); return y; }Man beachte das dein string Parameter jetzt eine Referenz ist und daher von der Funktion verändert werden kann. Bei deiner Variante war der string Parameter total nutzlos weil die bcd Variable in der main Funktion gar nicht geändert wurde.
-
Nachtrag: Der Rückgabewert sollte dann auch eine Referenz sein.