Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

CITH

Problema com o buffer usando o delimitador de string

Recommended Posts

Estou tendo um problema na limpeza do buffer após usar o delimitador de string. Testem o código seguinte:

#include <stdio.h>

int main()
{
    char Test[99];

    do
    {
        scanf(" %3s",Test);
        printf("%s\n",Test);

    } while( 1 );
}

Eu desejo coletar apenas 3 caracteres da string digitada, e está saindo como planejado, mas o resto da string que não foi coletada fica no buffer, ocasionando o problema que vocês já deve ter percebido. :upset:
Utilizando o operador de supressão "*" no scanf() não dá muito certo, utilizando o fflush(stdin) resolve, pois ela limpa o buffer todo, mas estou abolindo essa função da minha vida. O que eu devo fazer? Se puderem me ajudar agradeço muito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda há um problema, e se o usuário digitar menos de 3 caracteres? Teste aí.

Estou precisando pra um menu, com opções de 1 até 9, onde o usuário pode digitar o que quiser. Mas claro, só quero coletar o 1º caractere digitado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isis, não deu certo, ou eu que não sei utilizar bem essa função, olha só:

#include <stdio.h>

int main()
{
    char Test[99];

    do
    {
        fgets(Test,3,stdin);
        printf("%s\n",Test);

    } while( 1 );
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deu certo porquê? Não tem mto sentido colar só o código, falar que não deu certo e não fornecer o dado de teste...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você jogar esse código em qualquer compilador C eu tenho certeza que você tem capacidade de perceber o erro de cara.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você jogar esse código em qualquer compilador C eu tenho certeza que você tem capacidade de perceber o erro de cara.

E o que custa você explicar o problema? Nem sempre temos tempo (e vontade) de ficar copiando código e compilando, pra descobrir o que o usuário quer.

 

 

O segundo parâmetro de fgets é o tamanho máximo da string de leitura. Isso inclui o \n e o \0. No seu caso deveria ser 5, não 3.

 

Detalhe é que, se o usuário digitar mais de 3 caracteres, o buffer vai ficar cheio e na próxima leitura, terá o mesmo problema do início. O ideal seria limpar o buffer sempre após cada leitura ou ler todos os caracteres e pegar sempre os 3 primeiros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.