Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
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.
Tentou fgets?
http://linux.die.net/man/3/fgets
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 );
}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...
Se você jogar esse código em qualquer compilador C eu tenho certeza que você tem capacidade de perceber o erro de cara.
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.
#include <stdio.h>
int main()
{