Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1707 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Petit probleme tout bete (printf/scanf)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Petit probleme tout bete (printf/scanf)

n°599372
morpheus67
Posté le 30-12-2003 à 15:05:41  profilanswer
 

Code :
  1. main()
  2. {
  3.    char c='a';
  4.    while(c!='0' && c!='1')
  5.    {
  6.       printf("Valider ? (0 pour non | 1 pour oui) : " );
  7.       c=getchar();
  8.    }
  9. }


Quand je rentre 0 ou 1 ca marche, je sors de la boucle mais si je rentre un caractere autre que 0 ou 1 ca me fait ca :

Valider ? (0 pour non | 1 pour oui) : 5  //je rentre 5
Valider ? (0 pour non | 1 pour oui) : Valider ? (0 pour non | 1 pour oui) :

 
 
Pourquoi ca m'affiche 2 fois mon prinft sans me demander d'entrer le caractere ?
 
PS : si je remplace le char par un entier ca marche. Mais pourquoi avec un char ca marche pas ? :??:

mood
Publicité
Posté le 30-12-2003 à 15:05:41  profilanswer
 

n°599378
MagicBuzz
Posté le 30-12-2003 à 15:13:29  profilanswer
 

faut faire un flush du buffer après le getchar.

n°599384
morpheus67
Posté le 30-12-2003 à 15:27:21  profilanswer
 

MagicBuzz a écrit :

faut faire un flush du buffer après le getchar.

j'ai rajoute fflush(stdin) apres mon getchar mais ca ne change rien [:morpheus67] (c'est bien ca qu'il fallait faire  :??: )
 

n°599390
morpheus67
Posté le 30-12-2003 à 15:43:26  profilanswer
 

bon, je viens de lire sur le forum que sur la majorite des systems fflush(stdin) ne marche pas et qu'il faut vider le buffer "a la main". Comment on fait ?


Message édité par morpheus67 le 30-12-2003 à 15:43:39
n°599393
MagicBuzz
Posté le 30-12-2003 à 15:45:42  profilanswer
 

Je peux pas te dire :D
Je me souviens juste que j'avais eu ce problème un coup il y a 6 ans quand j'ai fait du C pendant un TP en cours :D

n°599473
gronwell
Posté le 30-12-2003 à 17:39:43  profilanswer
 

C'est moi, ça ça marche :  

Code :
  1. #include <stdio.h>
  2. #define CLEAR_STDIN { int c; while((c = getchar()) && (c != '\n')); }
  3. int main()
  4.   {
  5.        char c='a';
  6.    
  7.        while(c!='0' && c!='1')
  8.        {
  9.             printf("Valider ? (0 pour non | 1 pour oui) : " ); 
  10.             c=getchar();
  11.     CLEAR_STDIN;
  12.        }
  13. return (0);
  14.   }


 
J'ai chopé la macro là http://membres.lycos.fr/cultc/astuces.htm


Message édité par gronwell le 30-12-2003 à 17:40:53
n°599474
*syl*
--&gt; []
Posté le 30-12-2003 à 17:42:22  profilanswer
 

Pour vider ton buffer :

Code :
  1. while(getchar() != '\n');

n°599480
morpheus67
Posté le 30-12-2003 à 17:51:06  profilanswer
 

impeccable, vos 2 solutions marchent très bien :jap:

n°599523
red factio​n
Posté le 30-12-2003 à 19:43:43  profilanswer
 

morpheus67 a écrit :

j'ai rajoute fflush(stdin) apres mon getchar mais ca ne change rien [:morpheus67] (c'est bien ca qu'il fallait faire  :??: )
 
 


 
Taz troll detected

n°599526
morpheus67
Posté le 30-12-2003 à 19:45:44  profilanswer
 

red faction a écrit :


 
Taz troll detected


j'ai rajoute ce qu'on m'a dit mais j'ai vite remarque que ca ne marchait pas :D

mood
Publicité
Posté le 30-12-2003 à 19:45:44  profilanswer
 

n°599560
*syl*
--&gt; []
Posté le 30-12-2003 à 20:50:49  profilanswer
 

ToxicAvenger a écrit :

scanf caÿ mal (http://www.isty-info.uvsq.fr/~rumeau/fclc/fclc008.html#q_8)
 
Utilises plutot fgets

Où t'as vu un scanf ? :heink:

n°599561
ToxicAveng​er
Posté le 30-12-2003 à 20:52:04  profilanswer
 

*syl* a écrit :

Où t'as vu un scanf ? :heink:  


 
dtc ? [:zaib3k]

n°599562
*syl*
--&gt; []
Posté le 30-12-2003 à 20:53:43  profilanswer
 

On a un comique parmi nous [:petrus75]

n°599565
ToxicAveng​er
Posté le 30-12-2003 à 20:57:39  profilanswer
 

*syl* a écrit :

On a un comique parmi nous [:petrus75]


 
ouais j'ai enculé un clown ce week end  [:greenleaf]

n°601092
ToxicAveng​er
Posté le 02-01-2004 à 23:54:46  profilanswer
 

*syl* a écrit :

Où t'as vu un scanf ? :heink:  


 
Dans le titre [:evil-raphiscorn]

n°601093
*syl*
--&gt; []
Posté le 03-01-2004 à 00:00:25  profilanswer
 

ToxicAvenger a écrit :


 
Dans le titre [:evil-raphiscorn]  

T'y as déjà répondu crétin, j'te l'rappele  [:evil-raphiscorn]  

n°601112
ToxicAveng​er
Posté le 03-01-2004 à 00:23:28  profilanswer
 

*syl* a écrit :

T'y as déjà répondu crétin, j'te l'rappele  [:evil-raphiscorn]  
 


 
oui mais vu que t'avais pas capté que c'etait dans le titre, pauvre abruti, je me permets de le préciser explicitement  [:zebra33]

n°601115
*syl*
--&gt; []
Posté le 03-01-2004 à 00:25:16  profilanswer
 

ToxicAvenger a écrit :


 
oui mais vu que t'avais pas capté que c'etait dans le titre, pauvre abruti, je me permets de le préciser explicitement  [:zebra33]  

L'abruti c'est celui qui a pas compris que je parlais du message et qui n'a même pas pris le temps de le lire pour balancer son lien à 2 balles :sarcastic:  

n°601134
Taz
bisounours-codeur
Posté le 03-01-2004 à 00:57:27  profilanswer
 

mais vous êtes timbrés ou quoi ?
 
1) faut flusher stdout fflush(stdout)
2) fflush(stdin) ne sert à rien et n'a aucun effet sur les flux d'entrées
3) effectivement on récupère le '\n'
4) faut traiter le cas de EOF


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Petit probleme tout bete (printf/scanf)

 

Sujets relatifs
Probleme de PHP/MYSQL => je m'embrouille dans l'algoProblème avec mon site web
Probleme avec semaphoresProblème exécution getText et setText
[Newby] Problème avec les char*[WML] Créer un bête mot de passe en wml
Montrer le problème avec les valeurs null<?xml version="1.0" ?> -> probleme : font-size dans IE
[java]Problème d'import de classe swingProbleme avec Mysql_num_rows, je vois pas la
Plus de sujets relatifs à : Petit probleme tout bete (printf/scanf)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR