[C]Afficher une var int sous la forme d'un char

Afficher une var int sous la forme d'un char [C] - C - Programmation

Marsh Posté le 06-01-2006 à 20:05:49    

Bon tout est dans le titre, j'ai un int stocké sous une variable, et je veux le stocker dans une variable de type char (je précise que c'est un chiffre mon int, donc 1 seul charactere).
Je pense que c'est très très facile mais je m'y perds tout le temps lors de ce genre de conversion :/

Reply

Marsh Posté le 06-01-2006 à 20:05:49   

Reply

Marsh Posté le 06-01-2006 à 20:06:52    

char a;
int b;
 
si je fais  
 
a='b';
 
ca veut pas compiler :(

Reply

Marsh Posté le 06-01-2006 à 20:08:46    

int n;
char c;
 
/* Si le but est d'avoir l'entier dans un char */
c = (char) n;
 
/* Ou bien si le but est d'avoir le code Ascii du chiffre dans un char */
c = (char) n + '0';

Reply

Marsh Posté le 06-01-2006 à 20:09:53    

olivthill a écrit :

int n;
char c;
 
/* Si le but est d'avoir l'entier dans un char */
c = (char) n;
 
/* Ou bien si le but est d'avoir le code Ascii du chiffre dans un char */
c = (char) n + '0';


 
 
Merci infiniment  :love: , en fait il faut le caster en char, merci bcp bcp bpc :)

Reply

Marsh Posté le 06-01-2006 à 20:15:53    

Mmmh je comprends pas ce que je fais mal, je cast et ca fonctionne pas :(


Message édité par korxx le 06-01-2006 à 20:16:06
Reply

Marsh Posté le 06-01-2006 à 20:20:06    

ben oui c'est logique!  
 
char => 1 byte
int   => 4 bytes (suivant le compilo bien sure)
 
déjà imagine, un char peut avoir qu'un seul caractère. Or un nombre int peut avoir plusieurs caractères.
 
donc tu dois faire ceci.
 
int x = 123456;
char chaine[10];
 
sprintf (chaine, "%d", x);
printf("chaine %s", chaine);

Reply

Marsh Posté le 06-01-2006 à 20:22:15    

olivthill a écrit :

int n;
char c;
 
/* Si le but est d'avoir l'entier dans un char */
c = (char) n;
 
/* Ou bien si le but est d'avoir le code Ascii du chiffre dans un char */
c = (char) n + '0';


 
complètement faut ce truc
 
la concaténation "+" n'est pas permise en C. Ce genre de truc peut être fait en C#, ou en JAVA. Mais surement pas en C.  
pour concaténé des chaines de caractère en C, on utilise strcat()
voir le man pour plus d'infos

Reply

Marsh Posté le 06-01-2006 à 20:25:08    

moi23372 a écrit :

ben oui c'est logique!  
 
char => 1 byte
int   => 4 bytes (suivant le compilo bien sure)
 
déjà imagine, un char peut avoir qu'un seul caractère. Or un nombre int peut avoir plusieurs caractères.
 
donc tu dois faire ceci.
 
int x = 123456;
char chaine[10];
 
sprintf (chaine, "%d", x);
printf("chaine %s", chaine);


 
non je veux le stocker dans un seul char, pas une chaine.  
et c'est possible puisque mon int <10.
(c soit 1, 2,3,4,5,6,7,8 ou 9).
 
or '1' c'est un caractère :)


Message édité par korxx le 06-01-2006 à 20:26:01
Reply

Marsh Posté le 06-01-2006 à 20:29:34    

Citation :

Citation :

c = (char) n + '0';

complètement faut ce truc
la concaténation "+" n'est pas permise en C. Ce genre de truc peut être fait en C#, ou en JAVA. Mais surement pas en C.  
pour concaténé des chaines de caractère en C, on utilise strcat()  
voir le man pour plus d'infos


Désolé moi23372, ce n'est pas une concaténation mais une addition.

c = (char) n + '0';

est équivalent à

c = (char) n + 0x30;

ou

c = (char) n + 48;

Tu peux voir cela dans le man ou dans le K & R (que je consulte régulièrement depuis ... 1988 !).

Message cité 1 fois
Message édité par olivthill le 06-01-2006 à 20:34:58
Reply

Marsh Posté le 06-01-2006 à 20:32:54    

korxx a écrit :

Bon tout est dans le titre, j'ai un int stocké sous une variable, et je veux le stocker dans une variable de type char (je précise que c'est un chiffre mon int, donc 1 seul charactere).
Je pense que c'est très très facile mais je m'y perds tout le temps lors de ce genre de conversion :/


Si on parle bien de chiffre de 0 à 9 :  
 
Tu ajoutes '0' à la valeur et tu obtiens un int qui représente la valeur numérique du caractère correspondant ('0' - '9') pour ta plateforme. Tu peux le stocker dans un int ou dans un char d'un tableau de char.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 06-01-2006 à 20:32:54   

Reply

Marsh Posté le 06-01-2006 à 20:34:27    

olivthill a écrit :

Citation :

Citation :

c = (char) n + '0';

complètement faut ce truc


Désolé moi23372, mais ce n'est pas un concaténation mais une addition.

c = (char) n + '0';

est équivalent à

c = (char) n + 0x30;

ou

c = (char) n + 48;



 
 
bon alors carb0,carb1,conso0 et conso1 sont 4 int, leur affichage se passe correctement avec le premier printf, ensuite carb et conso sont 2 tableaux de 2 caractères.
par contre quand je les affiche a la fin ben ca va pas du tout :/ je trouve pas du tout mes chiffres :(
 
Sinon en rajoutant +'0' a mon int je trouve la valeur du code ascii mais ca m'aide pas pour rentrer ca dans un char :/
 

Code :
  1. printf("debug %d %d %d %d\n",carb0,carb1,conso0,conso1);
  2.      carb[0]=(char)carb0;
  3.      carb[1]=(char)carb1;
  4.      conso[0]=(char)conso0;
  5.      conso[1]=(char)conso1;
  6.      printf("%c%c%c%c",carb[0],carb[1],conso[0],conso[1]);


Message édité par korxx le 06-01-2006 à 20:37:56
Reply

Marsh Posté le 06-01-2006 à 20:34:46    

moi23372 a écrit :

complètement faut ce truc
 
la concaténation "+" n'est pas permise en C.  


Rien à voir. Ici, on parle d'int, pas de chaines de caractères...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 06-01-2006 à 20:35:56    

Emmanuel Delahaye a écrit :

Si on parle bien de chiffre de 0 à 9 :  
 
Tu ajoutes '0' à la valeur et tu obtiens un int qui représente la valeur numérique du caractère correspondant ('0' - '9') pour ta plateforme. Tu peux le stocker dans un int ou dans un char d'un tableau de char.


 
 
J'ai essayé ca mais quand je le stock dans mon char et que je l'affiche ensuite j'ai des caractères bizarre au lieu de mon chiffre :(
 
edit : en fait ca marche cette methode, j'avais fait une petite erreur  :D

Message cité 1 fois
Message édité par korxx le 06-01-2006 à 20:45:34
Reply

Marsh Posté le 06-01-2006 à 20:36:31    

moi23372 a écrit :


 
char => 1 byte
int   => 4 bytes (suivant le compilo bien sure)
 
déjà imagine, un char peut avoir qu'un seul caractère. Or un nombre int peut avoir plusieurs caractères.


Le monsieur il a dit (sic!)

Citation :

je précise que c'est un chiffre mon int, donc 1 seul charactere)


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 06-01-2006 à 20:37:17    

korxx a écrit :

J'ai essayé ca mais quand je le stock dans mon char et que je l'affiche ensuite j'ai des caractères bizarre au lieu de mon chiffre :(


Montre le code qui ne fonctionne pas.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 06-01-2006 à 20:40:06    

Emmanuel Delahaye a écrit :

Montre le code qui ne fonctionne pas.


 
 
bon ben avec le cast en char je n'y arrive pas, en revanche avec ta methode (faire apparaitre la valeur du code ascii dans l'int et le stocker dans un char) ca marche impec :)
 
Merci  :jap:  
 
Probleme résolu donc, merci a ceux qui m'ont aidé  :hello:

Reply

Marsh Posté le 04-08-2007 à 11:54:52    

korxx a écrit :

Bon tout est dans le titre, j'ai un int stocké sous une variable, et je veux le stocker dans une variable de type char (je précise que c'est un chiffre mon int, donc 1 seul charactere).
Je pense que c'est très très facile mais je m'y perds tout le temps lors de ce genre de conversion :/


 
 
j'ai la methode suivante :
 
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
main()
{  
   int b;
   char mot[10]={'j','g','t','n','i','k','p','s','e','r'};
   printf("ton chiffre 0 a 9 = " );
   scanf("%d",&b);
   printf("le numero %d correspond a la lettre %c",b,mot[b]);
   printf("\n" );
   system("PAUSE" );
   return EXIT_SUCCESS;
}
 
 


---------------
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !
Reply

Marsh Posté le 11-08-2007 à 16:32:26    

neacko a écrit :


j'ai la methode suivante :

#include <cstdlib>




Pas du C. Bonsoir...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 11-08-2007 à 18:31:08    

Emmanuel Delahaye a écrit :


Pas du C. Bonsoir...


 
Surtout avec ça...

neacko a écrit :


using namespace std;


!!!
 

neacko a écrit :

main()
{  
   int b;
   char mot[10]={'j','g','t','n','i','k','p','s','e','r'};
   printf("ton chiffre 0 a 9 = " );
   scanf("%d",&b);
   printf("le numero %d correspond a la lettre %c",b,mot[b]);
   printf("\n" );
   system("PAUSE" );
   return EXIT_SUCCESS;
}


Que c'est compliqué (pourquoi  2 printf et pourquoi passer par un "system" pour programmer une attente ???) !!! Surtout que ton pgm qui va chercher l'élément [b] d'un tableau de char n'a rien à voir avec le pb initial qui est de stocker la représentation littérale d'un chiffre dans une variable "char". La solution d'Olivthill est la plus simple  

int chiffre=5
char c=chiffre + '0'


et basta (+ étant un opérateur d'addition et non de concaténation comme l'a dit moibidule)
 

korxx a écrit :

Merci infiniment  :love: , en fait il faut le caster en char, merci bcp bcp bpc :)


Ben pas forcément (ça doit dépendre du niveau de criticité de ton compilo) car "int" et "char" étant sensiblement la même chose (à savoir des nombres codés sur un ou plusieurs bytes), le cast est généralement implicite...


Message édité par Sve@r le 11-08-2007 à 20:54:50

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed