question conne de C

question conne de C - C - Programmation

Marsh Posté le 25-10-2004 à 20:48:56    

Code :
  1. int main(int argc, char* argv[])
  2. {
  3.    int age, taille, poids,sommeil, leger, sedent, sport;
  4.    char sexe,bebe;
  5.    puts("entrez votre age" );
  6.    scanf("%d",&age);
  7.    puts("entrez votre taille" );
  8.    scanf("%d", &taille);
  9.    puts("entrez votre poids" );
  10.    scanf("%d",&poids);
  11.    puts("quel est votre sexe? f pour femme h pour homme" );
  12.   scanf("%c",&sexe);
  13.    if(sexe=='f' || sexe=='F')
  14.       {
  15.          puts("etes vous enceinte ou allaitez vous?" );
  16.          scanf("%c",&bebe);
  17.        }
  18.    puts("combien d'heures restez vous au repos?" );
  19.    scanf("%d",&sommeil);
  20. puts("combien d'heures avez une activit\xe9 sedentaire?" );
  21. scanf("%d",&sedent);
  22. puts("combien d'heures avez une activit\xe9 legere (marche)?" );
  23.    scanf("%d",&leger);
  24. puts("combien d'heures avez une activit\xe9 sportive?" );
  25.    scanf("%d",&sport);
  26.    printf("votre ration calorique id\xe9ale est de: %f \n",rationCal(poids,taille,age,sexe,bebe,sommeil,sedent,leger,sport));
  27.    return(0);
  28. }


 
y a quoi qui cloche, sachant que ca affiche :


entrez votre age
25
entrez votre taille
182
entrez votre poids
65
quel est votre sexe? f pour femme h pour homme
combien d'heures restez vous au repos?
0
combien d'heures avez une activité sedentaire?
24
combien d'heures avez une activité legere (marche)?
0
combien d'heures avez une activité sportive?
0
votre ration calorique idéale est de: 0.000000


 
(ca squizze le   scanf("%c",&sexe);) :o
 
merci :D


Message édité par joce le 25-10-2004 à 20:49:13
Reply

Marsh Posté le 25-10-2004 à 20:48:56   

Reply

Marsh Posté le 25-10-2004 à 21:10:25    

pas d'idée :??:

Reply

Marsh Posté le 25-10-2004 à 21:11:37    

soit tu fais ca avec  
while((c=fgetc(stdin)) != EOF && c != '\n');
 
soit tu lit toute la ligne avec fgets puis tu fais ton sscanf
 
edit : dans le but de sauter le '\n'


Message édité par cris56 le 25-10-2004 à 21:12:35
Reply

Marsh Posté le 25-10-2004 à 21:14:08    

mais pourquoi ca déconne uniquement au scanf("%c"... ?
parce que le \n est encore dans le buffer d'entrée ?


Message édité par joce le 25-10-2004 à 21:14:26
Reply

Marsh Posté le 25-10-2004 à 21:14:51    

je pense pas qu'un scanf pour un char soit fort conseillé quoiqu'il arrive :p

Reply

Marsh Posté le 25-10-2004 à 21:16:29    

Taz est en vacance ? [:cupra]

Reply

Marsh Posté le 25-10-2004 à 21:17:49    

je sais pas si getchar est ANSI ou non mais moi j'utiliserais
sexe=getchar();
fflush(stout);

Reply

Marsh Posté le 25-10-2004 à 21:18:02    

ba ou, verifie tes formats

Reply

Marsh Posté le 25-10-2004 à 21:19:13    

Slay > sert a quoi ton fflush(stdout); ?

Reply

Marsh Posté le 25-10-2004 à 21:19:35    

Slay a écrit :

je sais pas si getchar est ANSI ou non mais moi j'utiliserais
sexe=getchar();
fflush(stout);


Je disais pas ca pour toi  [:airforceone]

Reply

Marsh Posté le 25-10-2004 à 21:19:35   

Reply

Marsh Posté le 25-10-2004 à 21:21:12    

cris56 a écrit :

Slay > sert a quoi ton fflush(stdout); ?


de mémoire ( mais uniquement ) , je crois que getchar garde le 'enter' en mémoire, non ?

Reply

Marsh Posté le 25-10-2004 à 21:23:59    

'\n' et saute le si tu le veux
 
mais le fflush(stdout) n'est d'aucune utilité la

Reply

Marsh Posté le 25-10-2004 à 21:25:39    

essaye  
 
scanf(\n"%c",&sexe);
 
je crois que c'est une sombre histoire de buffer
 
edit : scanf("\n%c",&sexe);


Message édité par pinguin007 le 25-10-2004 à 21:37:54

---------------
LoD 4 ever && PWC spirit|Le topak de l'iMP-450|inDATOUNEwe trust
Reply

Marsh Posté le 25-10-2004 à 21:32:50    

pour sauter le '\n' tu fais
while((c=fgetc(stdin)) != EOF && c != '\n');

Reply

Marsh Posté le 25-10-2004 à 21:40:54    

et en faisant un fflush(stdin) juste avant ca peut marcher juste avant ? :D

Reply

Marsh Posté le 25-10-2004 à 21:46:45    

avant ou apres ca fera rien,  oubli fflush( stdin ) c'est pas bien, le standard ne definie aucun comportement pour ca

Reply

Marsh Posté le 25-10-2004 à 21:56:35    

sinon un truc qui marche aussi c'est de mettre un autre scanf juste avant du genre  
 
scanf("%c",&tmp);
scanf("%c",&sexe);
 
 
edit : ca marche mais je ne sais pas pourquoi [:spamafote]


Message édité par pinguin007 le 25-10-2004 à 22:00:45

---------------
LoD 4 ever && PWC spirit|Le topak de l'iMP-450|inDATOUNEwe trust
Reply

Marsh Posté le 25-10-2004 à 23:29:30    

joce > J'espère que tu mettras ce sondage en ligne, qu'on puisse s'amuser un peu avec tes serveurs :D

Reply

Marsh Posté le 26-10-2004 à 10:11:01    

fflush(stdin);
.
.
.
.
.
.
.
.
.
.
.
.
[:itm]


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 30-10-2004 à 20:30:46    

chrisbk a écrit :

fflush(stdin);
.
.
.
.
.
.
.
.
.
.
.
.
[:itm]


J'avais déjà soulevé ce pb dans le sujet "De l'utilité du fflush"
http://forum.hardware.fr/hardwaref [...] 6121-1.htm

Reply

Marsh Posté le 30-10-2004 à 21:15:34    

pinguin007 a écrit :

sinon un truc qui marche aussi c'est de mettre un autre scanf juste avant du genre  
 
scanf("%c",&tmp);
scanf("%c",&sexe);
 
 
edit : ca marche mais je ne sais pas pourquoi [:spamafote]

quand tu fais scanf("%d", ...) tu t'attends à ce que scanf bouffe les chiffres représentant l'entier et rien d'autre. pour scanf("%c", ...) il bouffe 1 char. Quant tu tape '1' puis '2', tu insères des caractères \n
 
ton premier scanf bouffe le '1', le deuxième se coltine le '\n'.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed