argcv

codes and stuff

Scanf e o buffer do teclado

with one comment

As vezes quando nosso programa se propõe interativo, enfrentamos alguns problemas quanto às possibilidades de erros de entrada.

Observe a função abaixo:

void main() {
    int x, y;

    printf("Digite um numero: ");
    scanf("%d", &x);
    printf("Digite outro numero: ");
    scanf("%d", &y);

    printf("\n\n%d %d\n\n", x, y);
}

Se aqui o usuário digitar “1 2” para o primeiro scanf(), o segundo scanf() atribuiria automaticamente à y o número 2. Isso porque o programa não limpa o seu buffer automaticamente.

Para evitar dores de cabeça, um dos métodos para quem programa no Linux seria utilizar a função __fpurge().

O exemplo acima ficaria assim:

void main() {
    int x, y;

    printf("Digite um numero: ");
    scanf("%d", &x);
    __fpurge(stdin); // limpa o buffer do teclado
    printf("Digite outro numero: ");
    scanf("%d", &y);

    printf("\n\n%d %d\n\n", x, y);
}

O parâmetro stdin informa à __fpurge() que o stream do buffer que deverá ser limpado é o do teclado.

Se você usa Windows, a alternativa seria usar o fflush(). Assim:

void main() {
    int x, y;

    printf("Digite um numero: ");
    scanf("%d", &x);
    fflush(stdin); // também limpa o buffer do teclado
    printf("Digite outro numero: ");
    scanf("%d", &y);

    printf("\n\n%d %d\n\n", x, y);
}

Até mais.

Anúncios

Written by rntreis

abril 17, 2012 às 8:54 pm

Publicado em C, dicas

Uma resposta

Subscribe to comments with RSS.

  1. […] também que eu adicionei a função __fpurge() em algumas ocasiões. Isso porque sem ela alguns bugs estavam sendo provocados em situações em […]


Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: