Você está visualizando atualmente Problema ao ler caractere. Como ler um caractere depois de outros dados?

Problema ao ler caractere. Como ler um caractere depois de outros dados?

Na aula anterior resolvermos um exercício pedindo ao usuário para informar seu sexo, sua idade, seu peso e sua altura. Se invertermos a ordem, assim: 1) Escreva um programa para pedir ao usuário sua idade, seu peso, sua altura e seu sexo. Será que teremos algum problema?

Sim teremos, e isso tem relação com uma região especial de memória chamada de BUFFER DO TECLADO.

Cada tecla do nosso teclado representa um caractere. Assim, se o usuário digitar por exemplo 27 para sua idade e pressionar a tecla ENTER, 69.8 para seu peso e pressionar a tecla ENTER , 1.72 para sua altura e pressionar a tecla ENTER e f para seu sexo e pressionar a tecla ENTER. Teremos algo assim no buffer do teclado: 27\n69.8\n1.72\nf\n.

É justamente o caractere \n entre 1.72 e a letra f que irá causar o problema, afinal, o ENTER também é um caractere. Veja nesta aula como resolver este problema!

Uma forma muito simples de resolver este problema é colocar um espaço após o último %f e antes do %c na função scanf(). Esse espaço diz ao computador para ignorar espaço, tabulação e ENTER.

  char sexo;
  int idade;
  float peso, altura;

  printf("Digite sua idade, peso, altura e seu sexo f ou m: ");
  scanf("%d%f%f %c", &idade, &peso, &altura, &sexo);
  printf("Sexo: %c\nIdade: %d\nPeso: %.2f\nAltura: %.2f\n", sexo, idade, peso, altura);

Outra forma de resolver este problema é, fazendo a leitura individual e, antes de pedir o sexo, limpar o buffer de teclado, como a seguir:

  char sexo;
  int idade;
  float peso, altura;

  printf("Digite sua idade: ");
  scanf("%d", &idade);
  printf("Digite sua peso: ");
  scanf("%f", &peso);
  printf("Digite sua altura: ");
  scanf("%f", &altura);

  // retirando o ENTER do buffer do teclado
  scanf("%c");// lendo um caracter sem salvar

  printf("Digite seu sexo f ou m: ");
  scanf("%c", &sexo);

  printf("Sexo: %c\nIdade: %d\nPeso: %.2f\nAltura: %.2f\n", sexo, idade, peso, altura);

Deixe um comentário

9 + 12 =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.