Problème sur un prog pourtantsimple C

Fermé
mickmac Messages postés 413 Date d'inscription jeudi 25 août 2011 Statut Membre Dernière intervention 15 août 2019 - 11 oct. 2012 à 20:30
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 12 oct. 2012 à 21:19
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



A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
Modifié par fiddy le 11/10/2012 à 22:30
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
Dosman Messages postés 1444 Date d'inscription mardi 1 mai 2012 Statut Contributeur Dernière intervention 26 septembre 2017 213
Modifié par Dosman le 11/10/2012 à 20:48
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
11 oct. 2012 à 22:27
%d (int) c'est pour les entiers pas pour les réels (double).
0
xosaci Messages postés 51 Date d'inscription mardi 30 août 2011 Statut Membre Dernière intervention 27 août 2013 8
11 oct. 2012 à 21:24
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
11 oct. 2012 à 22:29
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
xosaci Messages postés 51 Date d'inscription mardi 30 août 2011 Statut Membre Dernière intervention 27 août 2013 8
Modifié par xosaci le 12/10/2012 à 13:38
Oui tout à fait d'accord sauf que là c'est pas du tout utile donc autant pas se fatiguer ;)
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
12 oct. 2012 à 16:00
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
12 oct. 2012 à 16:35
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
xosaci Messages postés 51 Date d'inscription mardi 30 août 2011 Statut Membre Dernière intervention 27 août 2013 8
12 oct. 2012 à 18:05
C'est aussi mon avis et puis c'est une source d'erreur quand même.
0