2011-05-26 2 views
0

J'avais l'habitude d'utiliser fflush(stdin). Je lis que ce n'est pas un bon moyen de se débarrasser des caractères supplémentaires et qu'il est préférable d'utiliser fgets comme ceci:Tampon de vidage avec fgets

fgets(buffer,maxsize,stdin); 

Dans les cas que je veux disposer de ces caractères supplémentaires ... quel genre de tampon devrais-je utiliser? Pourrais-je rediriger dans une sorte de "tampon de non-retour"? Ou dois-je utiliser un tableau de taille finie?

Merci d'avance.

+0

Qu'essayez-vous exactement d'accomplir? Passer à la fin d'une ligne? –

+0

Je voudrais lire un entier et "jeter" toute l'entrée de ligne restante. – kaiseroskilo

+0

duplication possible de [Utilisation de fflush (stdin)] (http://stackoverflow.com/questions/2979209/using-fflushstdin) – Lundin

Répondre

3
+6

Bien que cela puisse théoriquement répondre à la question, [il serait préférable] (http: // meta. stackexchange.com/q/8259) pour inclure les parties essentielles de la réponse ici, et fournir le lien pour référence. – NullUserException

+1

@NullUserException Non, il serait préférable de fermer ce post car la question a déjà été répondue [plusieurs fois] (http://stackoverflow.com/search?q=fflush+stdin+undefined+behavior). – Lundin

2

utilisation consumetoendofline(stdin) à la place :)

int consumetoendofline(FILE *where) { 
    int ch; 
    while (((ch = fgetc(where)) != '\n') && (ch != EOF)) /* void */; 
    return ch; 
} 

Vous pouvez (et devrait) tester même la valeur de retour pour voir si le courant a atteint sa fin, ou s'il y a probablement plus data waiting ...