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
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
A voir également:
- Problème sur un prog pourtantsimple C
- Robot prog - Télécharger - Édition & Programmation
- Prog dvb - Télécharger - Télévision
- Comment faire patienter un prog - Forum Programmation
- Prog DVB ne fonctionne plus ✓ - Forum TV & Vidéo
- Aide pr premier pas en prog ✓ - Forum Programmation
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
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 :
Google is your friend
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
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
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 !"
"Moi je dis que le plus fort entre l'hippopotame et l'éléphant, c'est encore le rhinocéros !"
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
11 oct. 2012 à 22:27
%d (int) c'est pour les entiers pas pour les réels (double).
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
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 ! :)
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 ! :)
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
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", ...)
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", ...)
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
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 ;)
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
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.
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
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 :-).
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 :-).
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
12 oct. 2012 à 18:05
C'est aussi mon avis et puis c'est une source d'erreur quand même.