Afficher une suite de nombre avec un char ou int ?

Afficher une suite de nombre avec un char ou int ? - C - Programmation

Marsh Posté le 02-06-2017 à 14:11:59    

Bonjour a tous, pour m'entrainer au C je suis en train de faire la piscine de l'ecole 42.
Pour l'instant tout vas bien, il y a juste une chose que je ne comprends pas actuellement !
 
L'exercice demande ceci:
Écrire une fonction qui affiche tous les chiffres sur une seule ligne, dans l’ordre
croissant.
 
Voici la reponse:

Code :
  1. int  ft_putchar(char c);
  2. void ft_print_numbers(void)
  3. {
  4. char n;
  5. n = '0';
  6. while (n <= '9')
  7. {
  8.  ft_putchar(n);
  9.  n++;
  10. }
  11. }


 
Il y a une chose que je ne comprend pas, pourquoi n est un char ?
Ne serait pas t'il mieux de declarer n en tant que int ?
 
Du coup:
int n
n = 0
while (n <=0)
n++
 
Ceci ne serait pas mieux ?
Merci :)


---------------
http://forum.hardware.fr/hfr/Achat [...] 4112_1.htm
Reply

Marsh Posté le 02-06-2017 à 14:11:59   

Reply

Marsh Posté le 02-06-2017 à 14:22:42    

>Ceci ne serait pas mieux ?  
Dans ce cas: Non. Car n est utilisé pour stocker DES LETTRES - et oui, '0' c'est une lettre (précisément cela correspond au code ASCII du 0) et non LE CHIFFRE 0. Et pour des lettres on utilise des char (pas des unsigned char!). On peut utiliser du int mais par convention lettres->char et si on dévie de cette règle ça peut créer des problèmes.
 
Tu peux utiliser un int, mais dans ce cas il faut y stocker UN NOMBRE et utiliser la bonne fonction pour l'affichage, fonction que tu ne connais peut-être pas encore.

Code :
  1. int n;
  2. n=0;
  3. while(n<=9)
  4. {
  5.     printf("%d ", n);
  6.     n++;
  7. }


 
Pour être très clair, c'est important:
'0' -> LETTRE 0 (converti en code ASCII pour le '0' par le compilateur, c'est 48 je crois) - attention guillemets SIMPLES
0 -> CHIFFRE 0

Reply

Marsh Posté le 02-06-2017 à 14:55:55    

rat de combat a écrit :

>Ceci ne serait pas mieux ?  
Dans ce cas: Non. Car n est utilisé pour stocker DES LETTRES - et oui, '0' c'est une lettre (précisément cela correspond au code ASCII du 0) et non LE CHIFFRE 0. Et pour des lettres on utilise des char (pas des unsigned char!). On peut utiliser du int mais par convention lettres->char et si on dévie de cette règle ça peut créer des problèmes.
 
Tu peux utiliser un int, mais dans ce cas il faut y stocker UN NOMBRE et utiliser la bonne fonction pour l'affichage, fonction que tu ne connais peut-être pas encore.

Code :
  1. int n;
  2. n=0;
  3. while(n<=9)
  4. {
  5.     printf("%d ", n);
  6.     n++;
  7. }


 
Pour être très clair, c'est important:
'0' -> LETTRE 0 (converti en code ASCII pour le '0' par le compilateur, c'est 48 je crois) - attention guillemets SIMPLES
0 -> CHIFFRE 0


 
Meme si c'est pas propre, rien ne t'empeche de faire ca :
 

Code :
  1. int n;
  2. n='0';
  3. while(n<='9')
  4. {
  5.     printf("%c ", n);
  6.     n++;
  7. }


 
la différence entre le int et le char, c'est tout simplement que le char est sur 8 bits ( et signé) donc entre -128 et +127, alors que le int est généralement sur 32bits ( et signé ) donc entre -2 147 483 648 à 2 147 483 647.  
 
Rien n’empêche de stocker la valeur '0' - qui correspond comme tu le dis au caractère ascii "0" , qui vaut donc 0x30 ou 48 en décimal - dans une variable de type int.
 
Pour tester rapidement des petits codes, tu peux utiliser ce site : http://cpp.sh/
 
 
 

Reply

Marsh Posté le 02-06-2017 à 15:42:32    

D'accord Ba super merci les gars pour vos explications :)  
Finalement les deux méthodes fonctionnent :)  
Mais bon visiblement ils préfèrent le char là bas :D
Merci merci, vous inquiétez pas je risque de revenir dans quelques jours quand je serais aux pointeurs :D


---------------
http://forum.hardware.fr/hfr/Achat [...] 4112_1.htm
Reply

Marsh Posté le 02-06-2017 à 18:11:25    

xilebo a écrit :

Meme si c'est pas propre, rien ne t'empeche de faire ca :

Code :
  1. int n;
  2. n='0';
  3. while(n<='9')
  4. {
  5.     printf("%c ", n);
  6.     n++;
  7. }


Bien sûr on peut, mais c'est pas une bonne idée et quand on débute autant partir sur de bonnes bases...
 

Citation :

la différence entre le int et le char, c'est tout simplement que le char est sur 8 bits ( et signé) donc entre -128 et +127, alors que le int est généralement sur 32bits ( et signé ) donc entre -2 147 483 648 à 2 147 483 647.  

Attention, char sans signed ou unsigned peut être signé ou non signé selon la machine (K&R 2nd ed. p.36 §2.2). Je ne suis pas sûr si c'est la même chose pour int.
Parlant de int, aujourd'hui avec des machines 64 bit je dirais c'est généralement 64 bits. En tout cas il ne faut pas faire de suppositions là-dessus.
 
Les types de variables et leur taille en C c'est un peu chiant et ça dépend du compilateur / de la machine. Il faut être prudent. Après tant qu'on est uniquement sur ordinateur on peut considérer que int fait au moins 32 bit et sera donc suffisant pour pas mal de choses déjà. Un char c'est toujours 8 bits.
 

Citation :

je risque de revenir dans quelques jours quand je serais aux pointeurs :D

Bon courage. Les pointeurs c'est pas toujours évident mais c'est un point essentiel du C qu'il faut bien maitriser.

Reply

Sujets relatifs:

Leave a Replay

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