quinta-feira, 4 de dezembro de 2014

Limpando a “sujeirinha” do teclado “Limpeza de Buffer”

Ei, você! Sabe pra quê serve uma Limpeza de Buffer?
Não?? Então se liga nessa dica ...
Suponhamos que existam 3 funções, uma após a outra e ao tentar ler o caractere na segunda função, o programa simplesmente colocar o enter (\n) e já “pula” para a terceira(no nosso caso não haverá a leitura terceira). A limpeza de buffer serve para evitar este tipo de problema.
Um exemplo de quando é necessário limpar:

int main()
{
    char a;
    int b;
    printf("Informe caractere: ");
    a = getchar();
    printf("Informe numero: ");
    b = getchar();
    printf("%d",a);
    printf("%d",b);
    return 0;
}

Mas como limpar o buffer?
Cria-se uma função na qual chamaremos "limparBuffer", para isso criaremos vamos definir uma variável do tipo char e logo após faremos um ciclo while. Exemplo:

void limparBuffer(){
   char c;
   while ((c = getchar()) != “\n” && c != EOF);
}
O que esses comandos fazem é ir "pegando" os elementos do buffer, até que o caractere '\n' apareça, ou o EOF(end of file)Em outras palavras, enquanto c for diferente de quebra de linha ou c for diferente de EOF o ciclo vai continuar a execução.
Agora é só chamar a função apos cada leitura. Exemplo:

void limparBuffer()
{
   char c;
   while ((c = getchar()) != “\n” && c != EOF);
}
int main()
{
    char a;
    int b;
    printf("Informe caractere: ");
    a = getchar();
    limparBuffer();
    printf("Informe numero: ");
    b = getchar();
    limparBuffer();
    printf("%d",a);
    printf("%d",b);
    return 0;
}

Agora um método simples, utilizando o próprio scanf() é o seguinte:

scanf(" %d", &b); //repare no espaço entre o " e o %.

ou ainda:

scanf("\n%d", &b); //agora o "\n"

Simples não é? Isso já é o suficiente pra limpar o buffer.

Aproveitem!!!

Nenhum comentário:

Postar um comentário