Je crée un code pour convertir des nombres décimaux en nombres binaires (affectation universitaire). Si je ne fais que DecToBinary (5), cela me donne 101, et si je ne fais que DecToBinary (6), cela me donne 110, mais quand je fais ces deux déclarations dans main (), cela me donne 101110101 alors qu'il devrait simplement me donner 101110 (joignant les deux réponses ci-dessus). Je ne comprends pas ce qui se passe car il devrait simplement appeler DecToBinary (5) et imprimer 101 puis (sans ajouter de caractère de nouvelle ligne) appeler DecToBinary (6) et imprimer 110.
void DecToBinary(int dec){ int temp[64]; //64 is just a max value int i,j; while(dec>0){ temp[i]=dec%2; dec=dec/2; i++; } for(j=0;j<i;j++){ printf("%d",temp[i-1-j]); } }
3 Réponses :
Initialise toujours la variable. Vérifiez i et j dans votre cas.
j n'a pas besoin d'être initialisé car il est dans la boucle for
Oui pas obligatoire ici mais toujours une bonne habitude pour un meilleur code.
Vous n'avez pas initialisé la variable i
. Cela signifie que le comportement de votre programme n'est pas défini, car la valeur de i
peut être différente de 0
qui est ce que vous voulez.
Pour le corriger, il suffit d'initialiser i
lors de sa déclaration, c'est-à-dire int i = 0
La variable i
n'est pas initialisée
void DecToBinary( unsigned int dec )
donc la fonction a un comportement indéfini.
Vous devez l'initialiser avant la boucle while.
De plus, la boucle while devrait être remplacée par une boucle do-while. Sinon, la valeur 0 ne sera pas traitée correctement. Par exemple
i = 0; do { temp[i++] = dec % 2; } while( dec /= 2 );
De plus, comme la fonction ne traite pas les nombres négatifs, son paramètre doit avoir le type unsigned int
int i,j;
p >
Vous avez oublié d'initialiser
i
.Attention: variable locale non initialisée 'i' utilisée
- si votre compilateur ne vous donne pas un avertissement similaire, il est temps d'afficher vos avertissements et de les traiter comme des erreurs.