Receber números e letras do utilizador: O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécie Humana. Evolução, mudança, futuro – são das palavras que mais são ouvidas atualmente. Aliás, a programação também evoliu.
A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.
Visualize este vídeo no YouTube
Interação com o utilizador
Numa aplicação, a interação com os utilizadores é algo extremamente fundamental. Se não houver interação com o utilizador, a aplicação é, na maioria das vezes, algo inútil.
Na sequência disto, irá aprender a receber dados do utilizador utilizando duas funções: scanf e getchar. Todas diferentes mas, ao mesmo tempo, todas úteis.
scanf
A função “scanf” permite-nos obter diversos tipos de dados do utilizador: números inteiros, decimais e também caracteres. Exemplo:
Como pode ver na oitava linha, o primeiro argumento da função “scanf” contém o tipo de variável que vai ser inserido (tal como na função “printf”).
Os argumentos seguintes serão o nome das variáveis, precedidos por um “&”, a que os valores vão ser atribuídos. Pode ler a linha 8 da seguinte forma: “atribuir um número inteiro a idade”.
Quando se executa o código acima, irá aparecer a mensagem “Digite a sua idade: ” e o cursor irá posicionar-se logo após essa frase aguardando que um valor seja inserido. Depois de inserir o valor e pressionar ENTER, será imprimida uma mensagem com a idade que inseriu.
Relembrando, pode utilizar as seguintes expressões para definir o tipo de dados a ser introduzido:
- %d → Números inteiros (int)
- %f → Números decimais (float e double)
- %c → Caracteres (char)
Pedir mais do que um item
Podemos pedir mais do que um valor/caracter da seguinte forma:
Ou seja, depois de aparecer a mensagem “Digite dois números:”, terá que inserir dois números e pode identificar a sua separação com um espaço, enter ou tab.
Como pode ver, é muito simples utilizar a função scanf. Apesar de apenas termos utilizado números inteiros, pode utilizar números decimais ou caracteres com esta função.
getchar
Existe outra forma, mais simples, de pedir caracteres ao utilizador: a função “getchar”. Compare os seguintes dois exemplos (primeiro com scanf e segundo com getchar):
Como pode verificar, a utilização da função “getchar” é bastante simples e permite-nos receber, mais facilmente, caracteres do utilizador.
Buffer e a sua limpeza
Olhando para o código acima, irá pensar que coloco duas letras como “H” e “E” e que, no final é imprimido «O seu nome começa com “H” e termina com “E”.» mas não. Não é isso que acontece. Experimente correr o código.
Como deve ter verificado, logo após digitar a primeira letra, o programa terminando deixando o espaço para a segunda letra em branco.
O que aconteceu aqui? Quando nós clicamos no ENTER para submeter a primeira letra, além dessa letra, o ENTER (“\n”) é submetido para a memória e quando aparece um novo pedido para inserir um caracter, o “\n” é automaticamente assumido como esse novo caracter.
Para que isto não aconteça, basta limpar o buffer antes de utilizar novamente a função. No Windows utilizamos a função “fflush(stdin)” e no Linux “__fpurge(stdin)” de forma a limpar o buffer do stdin (teclado).
Então, ficaria assim:
1 – Crie um programa que gere um número aleatório entre 1 e 10; de seguida peça-lhe um número e, se acertar no número gerado recebe uma mensagem a dizer que ganhou. Caso contrário, recebe uma mensagem a dizer que perdeu.
2 – Crie um programa, baseando-se no da aula anterior, que peça os três números de uma equação de 2º grau e a resolva. Caso esta seja impossível, o utilizador deverá ser alertado.
3 – Crie um programa que, primeiro, peça dois números do tipo float e, de seguida, imprima as seguintes instruções:
De seguida deverá pedir a opção ao utilizador e mostrar o resultado consoante a escolha. O resultado deverá ter 3 casas decimais.
Mais uma vez, gostávamos de saber a sua opinião. Se tiver alguma dúvida, pode sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que utilize a keyword [DUVIDA] no início do seu comentário.