0
votes

Ma fonction donnera des réponses correctes sur un seul appel mais pas sur plusieurs

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]);
    }


}


2 commentaires

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.


3 Réponses :


0
votes

Initialise toujours la variable. Vérifiez i et j dans votre cas.


2 commentaires

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.



1
votes

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


0 commentaires

1
votes

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 >


0 commentaires