#1 Le 08/03/2007, à 18: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, à 10: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, à 12: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, à 13: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, à 13: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