Se compile mais ne fonctionne pas
Résolu
pépereF
Messages postés
36
Date d'inscription
Statut
Membre
Dernière intervention
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 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;
}
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;
}
A voir également:
- Se compile mais ne fonctionne pas
- Java compilé ou interprété ✓ - Forum Programmation
- Logiciel recompile et compile tar md5 - Forum récupération de données
- Vba compile error else without if - Forum VB / VBA
- Je n'arrive a pas a compiler avec code blocks ✓ - Forum C
- Erreur de compilation / Cet argument n'est pas facultatif . ?? - Forum VB / VBA
6 réponses
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 :
Si par exemple tu veux afficher le contenu de car[] :
Bonne chance
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
A ce moment là c'est juste le format d'affichage qui change :
donne :
Bonne chance
#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
Salut,
voici une possibilité
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; }
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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
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)
merci