Jump to content
guilherme ramalho

fflush (stdin)

Recommended Posts

guilherme ramalho

boa noite, alguém me podia explicar o porque de eu usar o comando "fflush (stdin)" neste código ( lembrando que é um código apenas de validação, para garantir que o nome não fica vazio), ou mostrar uma alternativa para não usa-lo?

do{

printf("Nome do atleta?");   

 fflush (stdin);                                                                                                                    

gets(ciclista.nome);

}while(ciclista.nome[0]== '\0');

obrigado, aguardo resposta! :D

Share this post


Link to post
Share on other sites
thoga31

O que inseres no teclado é colocado no buffer de input, o qual é "consumido" pelas funções de leitura de dados até serem satisfeitas. Isto tem como consequência a possibilidade de ficarem dados nesse buffer que o gets iria apanhar sem esperar que o utilizador inserisse novos dados. A fim de evitar esse efeito colateral, fazemos a limpeza do buffer antes do gets para que de facto o utilizador tenha a chance de introduzir dados.

O fflush(stdin) não é comummente recomendado, sendo uma função deste género uma possível alternativa:

void clearbuffer(FILE *f) {
    char ch;
    while (ch != EOF && ch != '\n') ch = fgetc(f);
}

// como usar:
clearbuffer(stdin);

Da mesma forma, é aconselhável usar o fgets ao invés do gets.

Cumprimentos.


Knowledge is free!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.