Se compile mais ne fonctionne pas

Résolu
pépereF Messages postés 36 Date d'inscription   Statut Membre -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
bonjour,
que doit-je mettre à la place de mon point d'interogation pour que mon programme en c fonctionne?
passage de base 10 en base16

#include<stdio.h>
int main()
{
int n;
char tab[10];
int car[10];
int l;
printf("changement de base: base 10 <-> base 16\n");
printf("Introduire un nombre en base 10: ");
scanf("%d",&n);
l=0;
while(n<10)
{
car[l++]=n%16;
n/=16;
}
while(n>=10)
{
tab[l++]=n%16;
n/=16;
}
printf("\n");
while(l)printf("%c",'0'+ ?);

return 0;
}
Configuration: Windows XP
Internet Explorer 6.0

6 réponses

  1. mamiemando Messages postés 33171 Date d'inscription   Statut Modérateur Dernière intervention   7 945
     
    Ben ça veut rien dire ce que tu as écrit:-)
    a) Ta boucle while(1) ne s'arrêtera jamais :p
    b) Ton printf est sensé afficher la valeur d'une variable. Exemple :
    int monint = 69;
    char monchar = 'x';
    float monfloat = 6.9;
    printf("%d",monint);
    printf("%c",monchar)
    printf("%lf",monfloat);

    Si par exemple tu veux afficher le contenu de car[] :
    int i;
    for(i=0;i<10;++i) printf("%d ",car[i]);

    Bonne chance
    0
    1. pépereF Messages postés 36 Date d'inscription   Statut Membre 2
       
      ok, mais si je veux que mon programme affiche les 2 suivant la saisie de l'utilisateur, ce que je veux c'est que mon programme me donne le resultat en base 16 d 'un nombre entré en base 10.
      merci
      0
  2. mamiemando Messages postés 33171 Date d'inscription   Statut Modérateur Dernière intervention   7 945
     
    A ce moment là c'est juste le format d'affichage qui change :
    #include <stdio.h>
    
    int main(){
        unsigned int i;
        for(i=0;i<16;++i) printf(" i (base 10) = %d\ti (base 16) = %x\n",i,i);
        return 0;
    }

    donne :
     i (base 10) = 0        i (base 16) = 0
    ...
     i (base 10) = 7        i (base 16) = 7
     i (base 10) = 8        i (base 16) = 8
     i (base 10) = 9        i (base 16) = 9
     i (base 10) = 10       i (base 16) = a
     i (base 10) = 11       i (base 16) = b
     i (base 10) = 12       i (base 16) = c
     i (base 10) = 13       i (base 16) = d
     i (base 10) = 14       i (base 16) = e
     i (base 10) = 15       i (base 16) = f

    Bonne chance
    0
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    voici une possibilité
    #include <stdio.h>
    
    int main ()
    {
      char s[20];
      int i, nb, quotient, reste, base = 16;
    
      i = 0; quotient = 1;
    
      printf ("Entrez un entier : ");
      scanf ("%d", &nb);
    
      while (quotient != 0){
          quotient = nb / base;
          reste = nb % base;
          nb = quotient;
    
          if (reste >= 0 && reste <= 9)
            s[i++] = reste + '0';
          else
            s[i++] = reste + 55;
      }
      s[i] = '\0';
    
      for (; i >= 0; --i) printf ("%c", s[i]);
      printf ("\n");
    
      return 0;
    }
    
    0
  4. pépereF Messages postés 36 Date d'inscription   Statut Membre 2
     
    merci ça marche,
    pourriez vous me commenter cette partie?
    if (reste >= 0 && reste <= 9)
    s[i++] = reste + '0';
    else
    s[i++] = reste + 55;
    ainsi que celle-ci?
    s[i] = '\0';

    car je ne comprend pas pourquoi reste +55
    et que signifie '\0'
    et merci encore
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    s[i++] = reste + '0';

    si le reste est 0,1,.....,9
    alors comme je stocke dans un tableau de caractères je dois ajouter '0' qui corespond au code ascii de caractère 0, c'est à dire 48

    0 + '0' = 0 + 48 = 48 donc j'ai le caractère 0
    1 + '0' = 1 + 48 = 49 donc j'ai le carctère 1
    .
    .
    9 + '0' = 9 + 48 = 57 donc j'ai le caractère 9

    s[i++] = reste + 55;

    de même pour les restes de 10 à 15
    Pour répresentation hexa j'ai besoin de caractères A, B, C, D, E, F
    Leur code ascii est
    A - 65; B - 66; C - 67; D - 68; E - 69; F - 70
    Donc pour obtenir leur code ascii je dois additionner 55

    10 + 55 = 65
    11 + 55 = 66
    12 + 55 = 67
    13 + 55 = 68
    14 + 55 = 69
    15 + 55 = 70

    s[i] = '\0';
    Une chaîne de caractères, qui en C est un tableau de caractères se fini avec le caractèr '\0'
    c'est pour ça qu'après la dernière incrementation de i je suis arrivé à la fin
    l'ajout de '\0' dans la position i signifie la fin de la chaîne.
    char c;
    c = 65;
    printf("%c\n", c);
    va afficher A et pas 65,en revanche
    char c;
    c = 65;
    printf("%d\n", c);
    va afficher 65

    0
  7. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    En fait je crois que cet exemple est suffisant
    lami20j@debian:~/trash$ cat ccm.c
    #include<stdio.h>
    
    int main ()
    {
      int i;
      char s[] = "salut";
    
      for (i = 0; i <= 9; ++i)
        printf ("reste %2d -> caractère %c\n", i, i + '0');
      for (i = 10; i <= 15; ++i)
        printf ("reste %d -> caractère %c\n", i, i + 55);
            for(i=0;s[i] != '\0';++i)
        printf("caractère %d = %c\n",i,s[i]);
            printf("caractère %d = %d(code ASCII du caractère NUL)\n",i,s[i]);
    
      return 0;
    }
    lami20j@debian:~/trash$ ./ccm
    reste  0 -> caractère 0
    reste  1 -> caractère 1
    reste  2 -> caractère 2
    reste  3 -> caractère 3
    reste  4 -> caractère 4
    reste  5 -> caractère 5
    reste  6 -> caractère 6
    reste  7 -> caractère 7
    reste  8 -> caractère 8
    reste  9 -> caractère 9
    reste 10 -> caractère A
    reste 11 -> caractère B
    reste 12 -> caractère C
    reste 13 -> caractère D
    reste 14 -> caractère E
    reste 15 -> caractère F
    caractère 0 = s
    caractère 1 = a
    caractère 2 = l
    caractère 3 = u
    caractère 4 = t
    caractère 5 = 0(code ASCII du caractère NUL)
    
    0