PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Warum versagt dieser Binärcodierer bei Zahlen < 8? (C)


Gohan
2008-10-13, 22:16:44
Hi, habe die Aufgabe gehabt einen Binärcodierer in einem Unterprogramm zu schreiben. Der Main teil war vorgegeben:

#include <stdio.h>

int main()
{
char binzahl[132];
int intzahl;
void int2bin(char *binzahl, int intzahl);

scanf("%d", &intzahl);
int2bin(binzahl, intzahl);
printf("Dezimal: %d, Binaer: %s\n", intzahl, binzahl);
while(1);

}

void int2bin(char *binzahl, int intzahl)
{
int x, i;
char binzahl2[132];

x = 0;
i = intzahl;
while(i!=0)
{
binzahl2[x]='0'+i%2;
i = i / 2;
x++;
}
x = x-1;
for(i=0;x>=0;x--,i++)
{
binzahl[i]=binzahl2[x];
}
}

Der funktioniert auch wunderbar, bloß bei Zahlen < 8 spuckt der nur noch Müll aus, aber ich habe keine Ahnung warum? :( Wäre für etwaige Tipps sehr dankbar :)

Berni
2008-10-13, 22:47:53
Vielleicht liegts daran, dass du das char-array mit memset initialisieren solltest (memset(binzahl,0x0,132);)?

an.zgep
2008-10-14, 19:49:37
warum eigentlich binzahl[132]? ich nehme an das programm soll auf einem 32-bit system laufen. da sind ints eh nur 32 bit lang. mit einem zusätzlichen feld für '\0' würds binzahl[33] also auch tun.

btw, bei mir rechnet die funktion einwandfrei. habs mal eben für 0 bis 1000 aufgerufen und nur korrekte ergebnisse (bis auf das, dass binzahl eben nicht '\0'-terminiert ist und die ausgabe deshalb besch* aussieht...)

€: hab VisualStudio 2008 SP1 benutzt.

Gohan
2008-10-14, 20:38:26
Hi an.zgep,

132 war Vorgabe, frag nicht wieso. Stimmt, hat doch richtig gerechnet, war nur zu Müde das zu erkennen... ^^; Hab das ganze jetzt noch mit 0 Terminiert, damit die Ausgabe schöner aussieht. Danke! :)