Ir ao conteúdo
  • Cadastre-se
barutaji

Erro na leitura de int e char

Posts recomendados

postei um código simples aqui no fórum. Tão simples que não testei, mas quando resolvi testar aconteceu um erro inesperado.

int main(){    int a;    char b, c;
    printf ("Digite o numero: ");    scanf ("%d",&a);    printf ("\nDigite outro numero: ");    scanf ("%c", &;        c=a;    printf ("%d   ",c);    printf ("%c\n",c);    c=b;    printf ("%d   ",c);    printf ("%c\n",c);
   system ("pause");   return 0;}

Assim que digito o 1º número o segundo sai igual automaticamente e quando vai escrever dá erro e só escreve um deles.

Digite o numero: 65Digite outro numero: 65   A10

Já tentei com números de um dígito mas dá no mesmo. Mostra o valor na tabela e 10(sempre aparece o 10). Sei que se limpar o stdin vai resolver, mas gostaria de entender o que aconteceu. Alguem poderia dar uma dica?

Compartilhar este post


Link para o post
Compartilhar em outros sites

você posto esse codigo no meu topico ai fui testa e vi isso tambem mais então

quando você digita uma letra e aperta enter dois caracteres estão no buffer, a

letra e o enter, o scanf so captura o primeiro caracter, a letra, deixando o

enter ainda no buffer, se voce chamar o scanf novamente, ele ira capturar o

enter que ficou no buffer 'automaticamente', e nao ira pausar para entrada de

dados, por isso ele "está pulando para a próxima instrução"

então coloca um getchar(); antes do segundo printf pra esse getchar pegar o

enter que ta no buffer

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como o bombb disse, o primeiro scanf espera receber um número, mas está recebendo um número e mais um newline, que fica no buffer.

Experimente isso no primeiro scanf:

printf ("Digite o numero: ");

scanf ("%d%*c", &a);

O asterisco diz pro scanf ignorar aquele char (o newline).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu, é isso mesmo. Não estava "acostumado" com a limpeza do stream por usar a notação c++ faz tempo. Nunca tive que limpar nada usando cin>>;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...