Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/03/2007, à 19:33

PedroEsteban

La fonction fflush(stdin) en UNIX/LINUX

D'aprés que j'ai compris fflush(stdin) n'a aucun effet en UNIX/LINUX. Alors, ceci posse des problémes lors de l'utilisation des scanf, par example après avoir executé un scanf sur un valeur numérique puisque dans ce cas un "/n" doit rester dans le buffer d'entrée après  son execution . Ce "/n" serait-il lit par le prochain scanf, même si l'on execute fflush au prealable, et le scanf resterait alors sans effet. Une possibilité est de utilser "%*c%c" comme chaine de formatage lors de ce deuxième scanf. Mais, il-y-a d'autres solutions plus elegantes que celle-ci? Je suis un debuttant en C. Soyez donc comprensibles avec moi si ma question est une sotisse  .....du même, je vous prie de bien vouloir être indulgents  avec mes fautes d'ortographe, de syntaxe, etc.

Salut

Pedro

Hors ligne

#2 Le 09/10/2013, à 11:27

Troumad

Re : La fonction fflush(stdin) en UNIX/LINUX

Pas de réponses ?


Amicalement vOOotre
A visiter sur http://troumad.org ou http://troumad.developpez.com

Hors ligne

#3 Le 09/10/2013, à 13:58

Melrock

Re : La fonction fflush(stdin) en UNIX/LINUX

Utilise fgets (pas gets, hein !) pour récupérer une ligne entrée et traite la tranquillement avec les cas d'erreurs et les messages qui vont bien.
Pour moi, c'est ce qu'il y a de plus simple et de plus sûr (et si tu veux profiter de la lecture formatée de scanf, tu peux sans problème utiliser sscanf sur ton buffer de lecture)


Tout problème a sa solution, donc s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

Hors ligne

#4 Le 09/10/2013, à 14:37

grim7reaper

Re : La fonction fflush(stdin) en UNIX/LINUX

Putain, le déterrage de compet’.
Bon, au moins c‘est l’occasion de répondre.

fflush sur stdin c’est un comportement non défini. Donc ça peut tout faire. ABSOLUMENT TOUT.
De flusher stdin, à ne rien faire en passant par effacer ton disque dur ou te faire sortir des démons du nez !!
Pour vider le buffer du clavier, on peut utiliser la fonction présentée ici.

Hors ligne

#5 Le 09/10/2013, à 14:40

pingouinux

Re : La fonction fflush(stdin) en UNIX/LINUX

Bonjour,
Pour sauter tous les caractères espaces, tabulations et '\n' (même sur plusieurs lignes), à partir de la position courante :

scanf("%*[ \t\n]");

Voici deux extraits de man scanf :

·      An optional '*' assignment-suppression character: scanf() reads input as directed by the conversion specification, but discards the input.   No  corre‐
              sponding pointer argument is required, and this specification is not included in the count of successful assignments returned by scanf().

[      Matches a nonempty sequence of characters from the specified set of accepted characters; the next pointer must be a pointer to char, and there must  be
              enough room for all the characters in the string, plus a terminating null byte.  The usual skip of leading white space is suppressed.  The string is to
              be made up of characters in (or not in) a particular set; the set is defined by the characters between the open bracket [ character and a close bracket
              ]  character.   The set excludes those characters if the first character after the open bracket is a circumflex (^).  To include a close bracket in the
              set, make it the first character after the open bracket or the circumflex; any other position will end the set.  The hyphen character -  is  also  spe‐
              cial;  when placed between two other characters, it adds all intervening characters to the set.  To include a hyphen, make it the last character before
              the final close bracket.  For instance, [^]0-9-] means the set "everything except close bracket, zero through nine, and hyphen".  The string ends  with
              the appearance of a character not in the (or, with a circumflex, in) set or when the field width runs out.

Hors ligne