Problème sur un prog pourtantsimple C

mickmac Messages postés 447 Statut Membre -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Voilà quelque chose cloche dans mon programme mais je vois pas du tout quoi;
Ca saute en plus et ça affiche pas mon 3eme printf mais je vois pas pourquoi...
Si vous pouvez m'aider ça serait avec plaisir

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
char x=0;
int y=0;
char z=0 ;
printf("choisissez un entier\n");
scanf("%d",&x);
printf("choisissez un réel\n");
scanf("%e",&y);
printf("choisissez une lettre\n");
scanf("%c",&z);

printf("vous avez choisi:\n %d \n %e \n %c \n",x,y,z);

return 0;
}

merci

3 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    scanf("%e",&y);
    Attention, tu as mis int y; au lieu de double y pour un réel.
    De plus, je te conseille de mettre %f au lieu de %e, sinon, le nombre s'affichera en forme exponentielle.
    Pour les entiers, je te conseille d'utiliser int plutôt que char (même si c'est juste).

    De plus, il faut faire attention avec les scanf. Il y a très souvent le '\n' qui vient se stocker dans le buffer clavier et qui sera lu avec le scanf("%c",...). Il faut donc vider le buffer.

    Par exemple :
    #include <stdio.h>   
    
    int main(void)   
    {   
    int x;   
    double y;   
    char z;  
       
    printf("choisissez un entier\n");   
    scanf("%d",&x);   
    printf("choisissez un réel\n");   
    scanf("%lf",&y);  
    getchar(); /*on lit le '\n' précédemment stocké*/  
    printf("choisissez une lettre\n");  
    scanf("%c",&z);   
    
    printf("vous avez choisi:\n %d \n %f \n %c\n",x,y,z);   
    
    return 0;   
    }   
    



    Google is your friend
    1
  2. Dosman Messages postés 1500 Statut Contributeur 217
     
    Faut mettre %d dans le scanf et le printf du nombre réel.

    "Moi je dis que le plus fort entre l'hippopotame et l'éléphant, c'est encore le rhinocéros !"
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      %d (int) c'est pour les entiers pas pour les réels (double).
      0
  3. xosaci Messages postés 56 Statut Membre 8
     
    Salut
    Ton code est vraiment pas génial, déjà ça ne sert strictement à rien de mettre la valeur 0 sur une valeur char ! Elle est sensé prendre la valeur d'une lettre donc ne l'initialise pas !
    Sauf que justement cette variable prend une lettre et tu demande d'entré un entier donc je te fais un bref résumé :
    Pour un entier :
    int a; (que tu peux initialiser parfois à 0)
    scanf("%d", &a);
    Pour une lettre :
    char a;
    scanf("%c", &a);
    Pour un nombre décimal :
    double a;
    scanf("%lf", &a);
    Déjà essaie avec sa ! :)
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Elle est sensé prendre la valeur d'une lettre donc ne l'initialise pas !
      Ben 0 correspond bien à une valeur ASCII particulière ;-))) '\0' qu'on retrouve en fin des chaîne.

      Et n'oublie pas de vider le buffer clavier avant le scanf("%c", ...)
      0
    2. xosaci Messages postés 56 Statut Membre 8
       
      Oui tout à fait d'accord sauf que là c'est pas du tout utile donc autant pas se fatiguer ;)
      0
    3. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      char est un type entier comme short et int, il a tout à fait le droit de l'utiliser comme ça. char est aussi le type privilégié des chaines de caractères mais c'est une autre histoire.
      0
    4. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Certes, mais quand on débute en C et qu'on met un char pour désigner un entier. Le risque d'overflow n'est pas loin ^^.
      Je pense que lorsqu'on débute, il n'y a que deux types à retenir en C pour les nombres :
      int / double.
      Par la suite, on pourra s'orienter vers char / short / int / long / long long (ISO C99) puis float / double / long double (et d'autres que j'ai sûrement oublié ^^).
      Enfin ce n'est que mon avis :-).
      0
    5. xosaci Messages postés 56 Statut Membre 8
       
      C'est aussi mon avis et puis c'est une source d'erreur quand même.
      0