Probleme bei meiner Binärfunktion---->
-
also hier ist der Code der funktion:(der rest des Programms, hat keinen einfluss hierrauf)
int decimal() { unsigned int dec; char bit[16]; char temp; int bin[16]; test: cout<<"\n\nPlease enter a 16-Bit binary number and press <ENTER>: "; for(int i=0; i<15; i++) { cin>>bit[i]; if(atoi(&bit[i])<0 || atoi(&bit[i])>1) { cout<<"\nInvalid value entered, enter 0 or 1!\n"; break; goto test; } } for(int y=15; y==0; y--) { dec+=bin[y]^y; } cout<<dec; return 1; }
das problem ist, dass das programm nich läuft wie ich will.
ich möchte dass man binäre zahlen eingibt, (0 ofer 1) die dan in dezimal umgewandelt werden. doch das verdammte atoi macht mist...
es sagt ich könne kein char in const *char umwandeln, aber mit dem adressoperator davor, kommt das nich mehr...wieso kann das programm nun nich binär in dezimal umwandeln??
thx
mfg
-
Das atoi macht keinen Mist. Erwartet wird eine Zeichenkette und kein einzelnes Zeichen. Mit dem Adressoperator meckert zwar der Compiler nicht mehr, aber atoi fühlt sich zurecht veranlasst, immer alle ab der Adresse folgenden Zeichen umzuwandeln. Das gibt ganzschün große Zahlen.
Aber, warum überhaupt atoi, wenn Du nur testen willst, ob dort 0 oder 1 drinsteht?
if()bit != '0') && bit[i] != '1')
tut's für die Prüfung auch.
Das Array bin wird bei Dir noch garnicht gefüllt. Ist aber auch nicht unbedingt notwendig, da bit[i]-48 das gewünschte Ergebnis liefert ('0' hat den Code 48, '1' hat den Code 49) und als char ist es auch nur ein Wert.
Dafür ist Deine for-schleife ziemlich daneben. Was soll den 1^15 ergeben
Wenn man so vorgehen will, kommst Du um den <<-Operator nicht vorbei.
BTW: strtol ersetzt gleich Dein ganzes Programm. Außerdem wäre das Thema im C-Bereich besser aufgehoben gewesen.
-
thx für die hilfe!!
aber:
wie soll cih das array denn dann füllen, und die werte auslesen, und verwerten?das mit dem 1^15, ... k das war mein fehler... lol
hab die formel verwechselt, ...