2013-03-19 3 views
2

Travaillant sur un devoir pour la classe, une partie de l'affectation nous a convertir de base dix en binaire, et représentant le nombre binaire comme un tableau de type char. Pour une raison ou une autre, ce n'est pas le calcul le plus juste. Toute aide serait appréciée.Convertir int en binaire, en utilisant un tableau de char pour le représenter

#include <stdlib.h> 
#include <stdio.h> 
xtractmsg(int a) 
{ 
    int rem,i,b,j,quotient; 
    char binaryNumber[16]; 



    for(i = 0; i <= 16; i++){ 

     if(a == 0) 
      binaryNumber[i]='0'; 
     else{ 

      rem = a % 2; 

      if(rem == 0) 
        binaryNumber[i]='1'; 
      else 
        binaryNumber[i]='0'; 
      a=a/2; 
     } 


    } 

    for(j=15; j>=0;j--) 
     printf("%c,%d",binaryNumber[j]); 


} 
entrée

est dix, la sortie est 0000000000000101.

+1

compilation avec des avertissements maximale sous tension, qui devrait vous dire quelque chose au sujet de votre 'appel printf' . –

+0

L'erreur est très faible. Vous avez la plupart du temps raison. – teppic

+0

ouais j'ai supprimé le% d supplémentaire, il était à l'origine là pour m'aider à déboguer autre chose. Merci – AdamTopi

Répondre

2

Je ne vais pas vous donner une réponse directe, car il est des devoirs, je vais indiquer où chercher. Regardez attentivement ce que vous faites après avoir obtenu un reste. Essayez de l'imprimer exactement là où vous l'avez et analysez ce que vous voyez.

Non apparenté mais aussi mauvais for(i = 0; i <= 16; i++), écrira finalement à l'élément 17, qui est inexistant.

+0

Ah, j'ai eu mes devoirs inversés. Merci beaucoup! – AdamTopi

+0

@AdamTopi En fait vous avez tiré votre propre pied, cette condition 'if (a == 0)' est complètement inutile, '0% 0 == 0', donc s'il n'y était pas, vous remarquerez que tout est juste inversé. Essayez d'écrire du code minimal mais suffisant, plus de code que vous avez, plus probablement vous avez un bug. – Andrey

0

Deux choses ici doivent être adressées.

La condition de la boucle est erroné par de un:

for(i = 0; i < 16; i++) { 

La logique a besoin reversing-:

if(rem == 0) 
    binaryNumber[i]='0'; 
else 
    binaryNumber[i]='1'; 
Questions connexes