Bem, muitos não sabem, mas em C, o buffer pode ser lido de maneira incorreta ao ler-se dados de diferentes tipos.
Ex.:
int numero;
char letra;
scanf("%d",numero);
scanf("%c",letra); // Ele irá iginorar esse scanf() caso seja lido desse jeito.
Para resolver o problema do buffer (ignora ler um dado), use o comando fflush(stdin) para limpar o buffer.
Esse comando é muito usado em arquivos, mas nessa ocasião tem uma função especial.
Toda vez que for ler um tipo de dado diferente (int com char, string com float, etc.) use o fflush(stdin).
int numero;
char letra;
scanf("%d",numero);
fflush(stdin);
scanf("%c",letra);
Dados que podem ser lidos juntos:
int, float e double;
char e string;
Nunca leia um int, float ou double depois de um char, string ou vice-versa sem limpar o buffer antes.
Agora executem esse programa com o define LIMPABUFFER com o valor de 0 e depois com o valor de 1 para ver a diferença:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define LIMPABUFFER 1 // Troque por 0 para desativar a limpeza do buffer.
int main(int argc, char **argv)
{
int numero;
char letra,palavra[20];
puts("Digite o numero:");
scanf("%d",&numero);
system("CLS"); /* Limpa a tela. */
#if LIMPABUFFER==1
fflush(stdin);
#endif
puts("Digite a palavra:");
gets(palavra);
system("CLS"); /* Limpa a tela. */
#if LIMPABUFFER==1
fflush(stdin);
#endif
puts("Digite a letra:");
scanf("%c",&letra);
system("CLS"); /* Limpa a tela. */
printf("O numero e: %d\n",numero);
printf("A palavra e: %s\n",palavra);
printf("A letra e: %c\n",letra);
getch(); /* Inclua a biblioteca conio.h para usar esse comando! */
return 0;
}
Pergunta
bruce845
Bem, muitos não sabem, mas em C, o buffer pode ser lido de maneira incorreta ao ler-se dados de diferentes tipos.
Ex.:
Para resolver o problema do buffer (ignora ler um dado), use o comando fflush(stdin) para limpar o buffer. Esse comando é muito usado em arquivos, mas nessa ocasião tem uma função especial. Toda vez que for ler um tipo de dado diferente (int com char, string com float, etc.) use o fflush(stdin). Dados que podem ser lidos juntos: int, float e double; char e string; Nunca leia um int, float ou double depois de um char, string ou vice-versa sem limpar o buffer antes. Agora executem esse programa com o define LIMPABUFFER com o valor de 0 e depois com o valor de 1 para ver a diferença:Postem o que acharam...
Editado por bruce845Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.