+ Responder ao Tópico



  1. #1
    adrianoviana
    Visitante

    Padrão Como esvaziar o buffer do scanf()?

    Eaih galera...Como eh q fço pra esvaziah o buffer da função scanf?
    Eh o seguinte...vou mostra um exemplo:
    #include <stdio.h>
    void visualizar();
    void adicionar();
    void main() {
    char ch;
    puts("o q vc quer fazer?");
    puts("(a)dicionar um bareco");
    puts("(v)izualizar um bareco");
    scanf("%c",&ch);
    switch(ch) {
    case 'a': adicionar();
    break;
    case 'v': visualizar();
    break;
    default: break;
    }
    }

    na função adicionar tem um printf() e depois pede para o usuario entrar com uma string e depois apertar ENTER. Aí q tá o problema. Parece q quando eu aperto ENTER no menu da função main(), ele parece q fica num buffer. Ele envia o ENTER direto para a função adicionar() fazendo com q o usuário não possa digitar a string(pois o gets da função adicionar() ja recebeu o ENTER.
    Como q eu faço pra este ENTER não ser enviado para o gets() da função adicionar?

  2. #2

    Padrão Como esvaziar o buffer do scanf()?

    fala ai!

    testa um:
    fflush(stdin);
    depois de ler o caracter (e antes de ler a string).
    sei la.... so vendo de perto... mas a intençao do fflush(3) eh (+/-) essa.

    falow.

  3. #3

    Padrão Como esvaziar o buffer do scanf()?

    aew cara....da uma olhada nisso...eu um lembro em q aula q ta...mas se nao me engano eh a funcao getchar();...apesar q o fflush(stdin); tbm deve de funciona...

    http://www.linuxdicas.com.br/modules...icles&secid=24

    :wink: :wink:

  4. #4

    Padrão Como esvaziar o buffer do scanf()?

    eu sempre uso o fflush(stdin) e funciona...

  5. #5

    Padrão Como esvaziar o buffer do scanf()?

    o fflush resolve.. mas se você fizer uma aplicação que grave dados em arquivos por exemplo, ao invéz de ficar dando fflush toda hora, você poderia fazer o seguinte:

    setvbuf(fdHandle, NULL, _IONBF, 0);

    fdHandle é o file-descriptor do arquivo.
    NULL era pra ser o buffer, mas nesse caso nao é necessário.
    _IONBF diz que não queremos bufferizar nada, ou seja, sem buffer streaming.
    e o ultimo parametro, 0, é o tamanho do buffer, também não precisamos.

    Mas preste atenção, isso faz com que TODAS OPERAÇÕES DE IO parem de fazer buffer-stream. Isso pode afetar a performance do sistema consideravelmente, principalmente se o processo é vital e consome muito processamento.

  6. #6

    Padrão Como esvaziar o buffer do scanf()?

    legal cara, essa eu não conhecia...