Mi a hiba az alábbi programban? (Tízes számrendszerből szeretnék kettesbe átváltani, de sajnos a programom nem fut le, elindul, de hibát ad. )
#include <stdio.h>
char bin[1000];
void tizbol_kettesbe(int d) {
int i, j;
for (i=0; d>=0; i++) {
if (d%2==0) {bin[i]='0';} else {bin[i]='1';}
d=d/2;
}
i--;
for (j=0; i!=0; j++) {
bin[j]=bin[i];
i--;
}
}
main() {
int d, i;
scanf("%d", &d);
tizbol_kettesbe(d);
for (i=0; bin[i]!='\0'; i++) {printf("%c", bin[i]);}
return 0;
}
Előre is köszönöm! :)
egyrészt a for ciklusodban a feltétel d>=0, ami mindig teljesülni fog, az i elmegy egészen addig, amíg a bin tömböt nem hivatkozza túl annyira, hogy segmentation fault-tal leálljon (nem próbáltam, de gondolom ez lesz). Tehát érdemesebb d>0 -t írni.
Valóban meg kell a bin tömb tartalmát fordítani, de ehelyett így elnézve inkább tükrözöd azt. Egy 012345 sorozatból 543345-öt csinálsz. Inkább csinálj egy másik karaktertömböt, és abba fordítsd meg, ne önmagában próbáld. Mellesleg azt is meg lehetne trükkösen csinálni - XOR-okkal kell csinálni, de az túl trükkös.
Továbbá azt sem látom, hogy vársz a string vége karakterre, de a bin tömböt nem inicializáltad, tehát elég véletlenszerű, hogy mennyi mindent ír ki a programod. Az eleje valszeg az lesz, amit vársz, utána pedig előfordulhat, hogy jöhetnek váratlan karakterek, váratlan mennyiségben.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!