Pplware

Vamos Programar? – Introdução à Programação #9

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:

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:

Exercícios:

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.

Exit mobile version