Ler duas letras seguidas no C

Se tem uma coisa que sempre me incomoda na programação em linguagem C é a leitura de caracteres.

Veja o código a seguir, ele parece correto. Na teoria você faz a leitura de um número de depois de uma letra e depois mostra esses dados. Na prática, somente o número lido está disponível. Isso porque o valor que acabou sendo lido para a variável de char foi o que indica uma nova linha (do enter que você deu ao entrar o número.

Sabendo do motivo, você pode buscar soluções, como a apresentada a seguir. Nessa solução eu primeiro fiz a leitura da letra e depois do número. Isso resolve.

Outra forma que funciona é fazer a leitura das entradas em um único comando, como mostro no código abaixo.

Essa segunda forma inclusive, funciona quando precisamos ler várias letras seguidas, como no código a seguir, onde mostra a leitura de um número seguido de duas letras.

Mas nem sempre é possível utilizar o scanf com todas as variáveis de uma vez. Muitas vezes é preciso fazer um printf para indicar ao usuário, antes de cada scanf, o que ele precisa fornecer de dados. Mas isso ainda tem solução.

Como eu disse, o problema do scanf de um caractere é que ele acaba lendo o caractere de nova linha. Uma gambiarra que pode ser utilizada é uma leitura falsa para pegar esse caractere que não se tem interesse. Veja que faço a leitura repetida no scanf. A primeira pega o caractere de nova linha e a segunda pega a letra efetivamente.

Existem outras formas de fazer a leitura de caracteres, mas eu ilustrei algumas básicas possíveis. Muitos recomendam o uso da função fflush(stdin), mas ela não funciona sempre.

 

Share

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

This site uses Akismet to reduce spam. Learn how your comment data is processed.