Pb de scanf ...
Fermé
foxnono06
-
27 janv. 2010 à 15:12
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 28 janv. 2010 à 22:46
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 28 janv. 2010 à 22:46
A voir également:
- Pb de scanf ...
- Scanf windows - Guide
- Scanf java ✓ - Forum Programmation
- Scanf - Forum C
- Scanf getchar ✓ - Forum C
- Scanf [^\n] ✓ - Forum C
7 réponses
flolarajasse
Messages postés
103
Date d'inscription
jeudi 12 novembre 2009
Statut
Membre
Dernière intervention
23 juin 2011
14
27 janv. 2010 à 15:21
27 janv. 2010 à 15:21
scanf("%c", &rep1);
essaye de mettre un espace mais je doute que cela change grand chose...
essaye de mettre un espace mais je doute que cela change grand chose...
flolarajasse
Messages postés
103
Date d'inscription
jeudi 12 novembre 2009
Statut
Membre
Dernière intervention
23 juin 2011
14
27 janv. 2010 à 15:29
27 janv. 2010 à 15:29
attends je vais me plonger dans ton programme...
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
27 janv. 2010 à 16:05
27 janv. 2010 à 16:05
Quand tu fais des copié-collé, tu arrives à des contradictions:
printf("Le rampant fait %f m\n",rampant);
printf("Le rampant fait %d m\n",rampant);
et
scanf("%f",&inc1);
scanf("%d",&inc1);
Choisis la bonne écriture ;-)
Bonne continuation.
printf("Le rampant fait %f m\n",rampant);
printf("Le rampant fait %d m\n",rampant);
et
scanf("%f",&inc1);
scanf("%d",&inc1);
Choisis la bonne écriture ;-)
Bonne continuation.
Bonjour,
déjà il faudrait que tu indiques les bons types dans tes scanf/printf.
genre :
et
ça va pas trop ensemble.
Sinon avant de faire ton scanf de caractère, essaye un fflush(stdin), ça résoudra peut-être ton problème...
Bonne chance
déjà il faudrait que tu indiques les bons types dans tes scanf/printf.
genre :
float inc1;
et
scanf("%d",&inc1);
ça va pas trop ensemble.
Sinon avant de faire ton scanf de caractère, essaye un fflush(stdin), ça résoudra peut-être ton problème...
Bonne chance
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
>
foxnono06
27 janv. 2010 à 20:05
27 janv. 2010 à 20:05
Bonjour,
Il faut mieux utiliser des double que les float. D'ailleurs que ce soit sqrt() ou cos(), elles prennent un double en paramètre. Donc en mettant ta variable en double, il n'y a pas de soucis.
En revanche, il ne faut pas oublier de mettre des %lf (au lieu de %f) dans tes scanf (il faut bien laisser %f dans les printf).
Cdlt,
Il faut mieux utiliser des double que les float. D'ailleurs que ce soit sqrt() ou cos(), elles prennent un double en paramètre. Donc en mettant ta variable en double, il n'y a pas de soucis.
En revanche, il ne faut pas oublier de mettre des %lf (au lieu de %f) dans tes scanf (il faut bien laisser %f dans les printf).
Cdlt,
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
27 janv. 2010 à 20:00
27 janv. 2010 à 20:00
Non, pas de fflush(stdin). Cela a un comportement indéfini.
Il faut se faire la fonction soit-même.
Cdlt,
Il faut se faire la fonction soit-même.
static videBuffer(void) { int c; while((c=getchar())!='\n' && c!=EOF); }
Cdlt,
foxnono06
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
28 janv. 2010 à 09:11
28 janv. 2010 à 09:11
Salut fiddy, tout d'abord merci pour tes réponses.
J'ai essayé de changer mes variables en doubles dans ma fonction cos et ça ne marche toujours pas ... j'ai une valeur négative de cos pour 15° ...
et par rapport à la fonction que tu m'as donnée pour vider le buffer je ne sais pas comment l'utiliser !
Voilà mon code actuellement :
J'ai essayé de changer mes variables en doubles dans ma fonction cos et ça ne marche toujours pas ... j'ai une valeur négative de cos pour 15° ...
et par rapport à la fonction que tu m'as donnée pour vider le buffer je ne sais pas comment l'utiliser !
Voilà mon code actuellement :
#include <stdio.h> #include <math.h> #include <stdlib.h> int main (void) { int rep2; int pan; int lon1; int nblon; int nbram; int surface; int tot1; int P; char rep1; float R; float rampant=0; float inc1; float h; double a; double inc2; printf("Quel est la longeur du rampant en m?\n"); scanf("%f",&rampant); fflush(stdin); printf("Cette mesure correspond t elle a la longeur au sol ? o=oui n=non\n"); scanf("%c", &rep1); if(rep1=='o') { fflush(stdin); printf("Connaissez vous l'inclinaison en %% ou en degre 1 = %% 2 = degre\n"); scanf("%d",&rep2); if(rep2==1) { fflush(stdin); printf("Inclinaison en %% ?\n"); scanf("%f",&inc1); h=(rampant*inc1)/100; R=(rampant*rampant)+(h*h); rampant=sqrt(R); printf("Le rampant fait %f m\n",rampant); } else if(rep2==2) { fflush(stdin); printf("Inclinaison en degre ?\n"); scanf("%lf",&inc2); printf("inc2 : %f\n",inc2); a=cos(inc2); printf("a: %f\n",a); rampant=rampant/a; printf("Le rampant fait %f m\n",rampant); } } else if(rep1=='n') { printf("Le rampant fait %f m\n",rampant); } fflush(stdin); printf("Quel type de panneau souhaitez vous utiliser : 1:Roto 2:Biosol 3:EGM \n"); scanf("%d",&pan); fflush(stdin); printf("Quel est la longeur de la toiture ?\n"); scanf("%d",&lon1); if(pan==1) { fflush(stdin); surface=rampant*lon1; printf("La surface de la toiture est de %d m\n",surface); nblon=lon1/1.047; nbram=rampant/2.028; tot1=nblon*nbram; printf("Vous pouvez mettre %d panneaux : %d sur la longeur et %d sur le rampant\n",tot1,nblon,nbram); P=270*tot1; printf("La puissance de l installation est : %d kW\n",P); } else if(pan==2) { nblon=lon1/1.047; } system("PAUSE"); }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
28 janv. 2010 à 13:02
28 janv. 2010 à 13:02
Salut,
j'ai une valeur négative de cos pour 15°
As-tu pensé à convertir 15° en radian ? Car lorsque tu calcules cos(x), le x doit être en radian.
Ainsi lorsque tu calcules cos(15), tu calcules non pas cos(15°) mais cos(15rad) ce qui donne bel et bien un nombre négatif. A toi donc de réaliser la conversion.
et par rapport à la fonction que tu m'as donnée pour vider le buffer je ne sais pas comment l'utiliser !
A la place de fflush(stdin), tu mets videBuffer();
Et tu définis la fonction videBuffer avant la fonction main() ou alors tu déclares la fonction.
Et enfin n'oublie pas de mettre return 0; à la fin de la fonction puisque la fonction main() renvoie un int.
Cdlt,
j'ai une valeur négative de cos pour 15°
As-tu pensé à convertir 15° en radian ? Car lorsque tu calcules cos(x), le x doit être en radian.
Ainsi lorsque tu calcules cos(15), tu calcules non pas cos(15°) mais cos(15rad) ce qui donne bel et bien un nombre négatif. A toi donc de réaliser la conversion.
et par rapport à la fonction que tu m'as donnée pour vider le buffer je ne sais pas comment l'utiliser !
A la place de fflush(stdin), tu mets videBuffer();
Et tu définis la fonction videBuffer avant la fonction main() ou alors tu déclares la fonction.
static void videBuffer(void) { int c; while((c=getchar())!='\n' && c!=EOF); }
Et enfin n'oublie pas de mettre return 0; à la fin de la fonction puisque la fonction main() renvoie un int.
Cdlt,
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
28 janv. 2010 à 13:02
28 janv. 2010 à 13:02
Salut,
j'ai une valeur négative de cos pour 15°
As-tu pensé à convertir 15° en radian ? Car lorsque tu calcules cos(x), le x doit être en radian.
Ainsi lorsque tu calcules cos(15), tu calcules non pas cos(15°) mais cos(15rad) ce qui donne bel et bien un nombre négatif. A toi donc de réaliser la conversion.
et par rapport à la fonction que tu m'as donnée pour vider le buffer je ne sais pas comment l'utiliser !
A la place de fflush(stdin), tu mets videBuffer();
Et tu définis la fonction videBuffer avant la fonction main() ou alors tu déclares la fonction.
Et enfin n'oublie pas de mettre return 0; à la fin de la fonction puisque la fonction main() renvoie un int.
Cdlt,
j'ai une valeur négative de cos pour 15°
As-tu pensé à convertir 15° en radian ? Car lorsque tu calcules cos(x), le x doit être en radian.
Ainsi lorsque tu calcules cos(15), tu calcules non pas cos(15°) mais cos(15rad) ce qui donne bel et bien un nombre négatif. A toi donc de réaliser la conversion.
et par rapport à la fonction que tu m'as donnée pour vider le buffer je ne sais pas comment l'utiliser !
A la place de fflush(stdin), tu mets videBuffer();
Et tu définis la fonction videBuffer avant la fonction main() ou alors tu déclares la fonction.
static void videBuffer(void) { int c; while((c=getchar())!='\n' && c!=EOF); }
Et enfin n'oublie pas de mettre return 0; à la fin de la fonction puisque la fonction main() renvoie un int.
Cdlt,
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
28 janv. 2010 à 22:46
28 janv. 2010 à 22:46
peux tu m'explique l'avantage de passer par la fonction que tu m'as donnée plutôt que fflush ?
Ce n'est pas un avantage. C'est surtout la seule façon de faire. fflush() a un comportement indéfini sur les périphériques d'entrée. Ainsi fflush(stdin) ne doit jamais être utilisé dans un programme. Sinon c'est une erreur.
Ce n'est pas un avantage. C'est surtout la seule façon de faire. fflush() a un comportement indéfini sur les périphériques d'entrée. Ainsi fflush(stdin) ne doit jamais être utilisé dans un programme. Sinon c'est une erreur.
27 janv. 2010 à 15:24