Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1083 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Afficher une suite de nombre avec un char ou int ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Afficher une suite de nombre avec un char ou int ?

n°2301449
raiden5002
Posté le 02-06-2017 à 14:11:59  profilanswer
 

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
mood
Publicité
Posté le 02-06-2017 à 14:11:59  profilanswer
 

n°2301450
rat de com​bat
attention rongeur méchant!
Posté le 02-06-2017 à 14:22:42  profilanswer
 

>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

n°2301452
xilebo
noone
Posté le 02-06-2017 à 14:55:55  profilanswer
 

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/
 
 
 

n°2301456
raiden5002
Posté le 02-06-2017 à 15:42:32  profilanswer
 

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
n°2301480
rat de com​bat
attention rongeur méchant!
Posté le 02-06-2017 à 18:11:25  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Afficher une suite de nombre avec un char ou int ?

 

Sujets relatifs
Exercice de la piscine 42: afficher l'alphabet[HTML/PHP/JS] Afficher x pages en alternances sur timer
Afficher une grille dans GoogleEarth à partir d'un pointLimiter le nombre de téléchargement sur mon
[Wordpress] Afficher article(s) sur FacebookAfficher plusieurs lignes sur une seule
EN REXX calculer le nombre de jours ouvrés entre 2 datesOpenLayers3 : afficher Text
comparer deux nombreafficher des images au fur et à mesure d'un appel ajax
Plus de sujets relatifs à : Afficher une suite de nombre avec un char ou int ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR