Pb de scanf ...
foxnono06
-
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
alors mon problème est le suivant :
Je souhaite poser une question à l'utilisateur et celui doit taper o ou n pour oui ou non mais mon programme s'arrête après le scanf, je ne comprends pas ... J'ai essayé de faire un printf de la dite variable et ce n'est même pas la variable que j'ai rentré...
Merci d'avance !!
alors mon problème est le suivant :
Je souhaite poser une question à l'utilisateur et celui doit taper o ou n pour oui ou non mais mon programme s'arrête après le scanf, je ne comprends pas ... J'ai essayé de faire un printf de la dite variable et ce n'est même pas la variable que j'ai rentré...
Merci d'avance !!
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main (void)
{
int rep2;
int inc2;
char rep1;
float R;
float rampant=0;
float inc1;
float h;
printf("Quel est la longeur du rampant en m?\n");
scanf("%f",&rampant);
printf("Cette mesure correspond t elle a la longeur au sol ? o=oui n=non\n");
scanf("%c",&rep1);
if(rep1=='o')
{
printf("Connaissez vous l'inclinaison en %% ou en degre 1 = %% 2 = degre\n");
scanf("%d",&rep2);
if(rep2==1)
{
printf("Inclinaison en %% ?\n");
scanf("%f",&inc1);
h=(rampant*inc1)/100;
printf("h : %f\n",h);
R=(rampant*rampant)+(h*h);
printf("R : %f\n",R);
rampant=sqrt(R);
printf("Le rampant fait %f m\n",rampant);
}
else if(rep2==2)
{
printf("Inclinaison en degre ?\n");
scanf("%d",&inc1);
rampant=rampant/cos(inc1);
printf("Le rampant fait %d m\n",rampant);
}
}
else if(rep1=='n')
{
printf("Le rampant fait %d m\n",rampant);
}
system("PAUSE");
}
A voir également:
- Pb de scanf ...
- "Scanf(&s,&n)" ✓ - Forum C
- Scanf windows - Guide
- Scanf segmentation fault ✓ - Forum Programmation
- Scanf float ✓ - Forum Programmation
- Scanf langage c - Forum C
7 réponses
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...
foxnono06
effectivement ça ne change rien, mais merci quand même ;)
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
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,
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
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,
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,
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.