[Devoirs] Conversion décimal -> binaire et chaîne de caractère
Bonjour à tous.
Après avoir parcouru un peu le forum et le reste de l'internet, j'ai trouvé diverses informations concernant mon souci, mais rien de compréhensible ou fonctionnel.
Il s'agit d'un devoir d'algorithmique dont voici l'énoncé
Citation:
Ecrire une fonction en C qui reçoit un nombre entier (ex: 13) et retourne un tableau de caractères représentant la valeur binaire de ce nombre (ex: 1101).
Ma fonction doit donc prendre un entier en paramètre et utiliser la division modulaire pour compléter une chaîne de caractère (qui sera ensuite inversée, sans quoi le résultat sera faux) puis retournera cette valeur.
Cependant, après avoir procédé à l'implémentation, je ne parviens toujours pas au bout de mes peines. Mon erreur doit probablement venir de la façon dont je manipule ma chaîne de caractère.
Pourrait-on m'indiquer mon erreur et le pourquoi de son dysfonctionnement ?
Voici le code que j'utilise (celui que j'ai actuellement, j'ai testé plein de choses mais rien de concluant). Il n'y a pas l'inversion de la chaîne de caractère dedans.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* convertToBinary(int nb)
{
char *bin = (char*)malloc(sizeof(char)*8); //Admettons que je n'utilise que des chiffres codés sur 1 octet
int i = 0;
//Le reste de la division sera utilisé pour compléter le binaire. Puis on prends le résultat entier de la division pour continuer la conversion
for(i = nb; i > 0; i /= 2)
{
if(i % 2)
*bin += "1";
else
*bin += "0";
}
return bin; //On retourne la chaîne de caractère
}
int main()
{
int number = NULL;
scanf("%d", &number);
printf("%s\n", convertToBinary(number));
return 0;
} |
J'ai également tenté sans succès d'utiliser strcpy et strcat, voire la combinaison des deux. Sans succès
Ce code compile mais retourne des valeurs étranges. Par exemple, si j'entre le nombre 13 (comme dans la donnée), j'obtiens comme résultat : ↕↨i↕↨i
Notez que ce résultat change à chaque exécution, malgré le fait que j'entre toujours le nombre 13.
Merci pour vos éclaircissements.