[C] pb avec fgets

pb avec fgets [C] - C - Programmation

Marsh Posté le 25-08-2003 à 11:30:53    

:hello: all
 
Voilà, pour être original :whistle: j'ai un souci avec fgets...
 
Déjà le morceau de code:
 

Code :
  1. t_coord saisie(signed char player, t_coup *coups)
  2. {
  3. t_coord saisie;
  4. int help = 0;
  5. char entree[2];
  6. saisie.x = DIM+1;
  7. saisie.y = DIM+1;
  8. while(!saisie_ok(coups, saisie, player))
  9. {
  10.   printf("joueur %d coord x? ", player+1);
  11.   fgets((char*)&entree, 2, stdin)
  12.   printf("\n" );
  13.   if(entree[0]=='h'||entree[0]=='H')
  14.   {
  15.    help++;
  16.    saisie.x = DIM+1;
  17.   }
  18.   else
  19.    saisie.x = atoi((char*)&entree);
  20.   printf("joueur %d coord y? ", player+1);
  21.   fgets((char*)&entree, 2, stdin)
  22.   printf("\n" );
  23.   if(entree[0]=='h'||entree[0]=='H')
  24.   {
  25.    help++;
  26.    saisie.y = DIM+1;
  27.   }
  28.   else
  29.    saisie.y = atoi((char*)&entree);
  30.   if(help==2)
  31.    showhint(coups, player);
  32.   return(saisie);
  33. }


 
Par contre le souci, c'est qu'il ne me demande rien pour le second fgets [:mlc] ! Avant je faisais avec un scanf et ca marchait impeccable, par contre il faut que je puisse lire soit un int (la coordonnée), soit un char (le 'h')...
 
J'ai fouillé un peu dans le forum, certains disent qu'il faut flusher le buffer d'entrée, mais ça n'a pas l'air très standard... :/
 
Qqun a une solution?
 :jap:


Message édité par freds45 le 25-08-2003 à 11:31:11

---------------
Filmstory : gardez trace des films que vous avez vu ! :D
Reply

Marsh Posté le 25-08-2003 à 11:30:53   

Reply

Marsh Posté le 25-08-2003 à 11:37:47    

Il te reste visiblement des caractères sur le flux d'entré dont \n
 
Soit tu le chope, soit tu flush (opération dont l'effet est indéfini sur les flux d'entrée si je me souvien bien)


Message édité par LetoII le 25-08-2003 à 11:40:46

---------------
Le Tyran
Reply

Marsh Posté le 25-08-2003 à 11:39:30    

LetoII a écrit :

Il te reste un caractère sur le flux d'entré: \n
 
Soit tu le chope, soit tu flush (opération dont l'effet est indéfini sur les flux d'entrée si je me souvien bien)


 
je fais comment?


---------------
Filmstory : gardez trace des films que vous avez vu ! :D
Reply

Marsh Posté le 25-08-2003 à 11:42:46    

freds45 a écrit :


 
je fais comment?


getc doit marcher.


---------------
Le Tyran
Reply

Marsh Posté le 25-08-2003 à 11:45:49    

j'ai rajouté
 

Code :
  1. getc(stdin);


 
après le fgets, et ça a l'air de marcher :jap: !


---------------
Filmstory : gardez trace des films que vous avez vu ! :D
Reply

Marsh Posté le 25-08-2003 à 11:52:14    

finalement ça marche pas ! [:totoz]  
quand je rentre un 'h', il me refait logiquement un tour de boucle. J'entre les valeurs la 2ème fois, et ... rien [:wam]
 
Purée c'est nul! :cry:  
J'vais être obligé de repasser avec le '-1' pour le hint, c'est dommage :/


---------------
Filmstory : gardez trace des films que vous avez vu ! :D
Reply

Marsh Posté le 25-08-2003 à 12:18:31    

char entree[2];  
 
 
 
fgets((char*)&entree
 
 
ça doit meme pas compiler ton truc.
 
 
sinon passe par fgetc pour attraper un unique caractère, c'est plus simple
 
pour la gestion minu/majuscule, tu peux faire
 
 
if (toupper(c)=='H')
 
au lieu de tester et h et H

Reply

Marsh Posté le 25-08-2003 à 12:23:41    

Taz a écrit :

char entree[2];  
 
 
 
fgets((char*)&entree
 
 
ça doit meme pas compiler ton truc.
 
 
sinon passe par fgetc pour attraper un unique caractère, c'est plus simple
 
pour la gestion minu/majuscule, tu peux faire
 
 
if (toupper(c)=='H')
 
au lieu de tester et h et H


 
bah pourtant ça compilait  :whistle:  
Je vais voir avec fgetc :hello:


---------------
Filmstory : gardez trace des films que vous avez vu ! :D
Reply

Sujets relatifs:

Leave a Replay

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