Funções scanf e printf
Teoria
Introdução
Fala aí, aqui é o Guga do Responde Aí! Tudo bem com você?
Nós já conhecemos a estrutura de um programa codificado na linguagem C e os seus recursos básicos para o armazenamento de dados. Tendo isso como base, nesse tópico nós iremos falar sobre duas funções específicas extremamente importantes, que são: scanf e printf.
Mas por que elas são tão importantes?
Pois é através delas que nós conseguimos fornecer dados para um programa realizar o seu processamento, e, quando o mesmo for finalizado, visualizarmos as alterações feitas.
Entrada e saída de dados
A entrada de um programa nada mais é do que a maneira com que um dado é inserido nesse programa para ser processado, já a saída de um programa é para onde esses dados vão após serem processados.
Nesse momento, um programa (editor de texto) está recebendo como entrada cada letrinha que teclo no meu teclado e processando esses caracteres para formar esse texto, exibindo-o formatado no meu monitor. Dessa forma, nós podemos afirmar que o meu teclado é o dispositivo de entrada dos dados desse programa, enquanto o meu monitor é o dispositivo de saída dele.
Esse cenário que nós acabamos de descrever é um dos mais básicos da programação, mas por quê?
Porque é aquele que nós mais utilizamos quando estamos aprendendo a programar, onde o dispositivo de entrada é o teclado e o de saída o monitor.
Mas é importante lembrar que não existe só um jeito de obter e exibir dados de um programa, aqui embaixo estão alguns exemplos de como isso pode acontecer:
- Em uma chamada, o microfone é o dispositivo de entrada que processa a sua voz e a emite no alto-falando (dispositivo de saída) do outro lado da conversa;
- Em um carro, o sensor de velocidade é o dispositivo de entrada para um programa que processa os sinais de velocidade e os exibe em forma de números no painel digital do carro, que por sua vez é o dispositivo de saída;
- No ônibus, o nosso cartão magnético é outro mecanismo de entrada para um programa que processa os dados embutidos no cartão e os exibe no monitor da catraca após o débito no saldo, nesse exemplo o monitor da catraca é os dispositivos de saída.
Viu como podemos pensar em inúmeros exemplos?
Biblioteca stdio
Você lembra o que é uma biblioteca?
Caso tenha se esquecido, uma biblioteca nada mais é do que um monte de códigos prontinhos para uso. No caso da biblioteca stdio, esses códigos tratam a entrada e saída de dados de um programa.
Uma coisa que devemos saber é que esses códigos prontos são disponibilizados através de funções, que nós só iremos ver nos últimos tópicos. Então, considere nesse momento que uma função é o nome que nós damos para uma funcionalidade, essa que é disponibilizada pela biblioteca.
Tendo isso em mente, o que nós podemos fazer com a biblioteca stdio?
Abaixo estão as principais funções presentes nessa biblioteca:
- scanf(): função responsável por ler um dado do teclado e imediatamente atribuí-lo a uma variável;
- printf(): função responsável por imprimir algo na tela, pode ser um texto ou o conteúdo de uma variável ou constante.
Incluindo uma biblioteca
Para nós utilizarmos a biblioteca stdio precisamos incluir um arquivo que fala para o nosso programa todas as funções que aquela biblioteca disponibiliza, nós chamamos esse arquivo de cabeçalho.
Tá bom Guga, mas onde incluímos esse arquivo?
Simples! No espaço que nós reservamos para a inclusão de bibliotecas quando definimos a anatomia de um programa, olha ela aqui:
E essa inclusão é feita da seguinte forma:
Basicamente, nós digitamos o comando de inclusão #include e entre os sinais de menor e maior digitamos o nome da biblioteca que queremos incluir seguido de .h, que é a extensão para arquivos header (cabeçalho).
Prontinho, a biblioteca foi incluída e agora nós podemos usar as funções que ela disponibiliza em nosso programa.
Função scanf
A função scanf é utilizada para ler algum dado digitado pelo usuário. Ou seja, sempre que esse comando for usado, o programa irá pausar e esperar a entrada de um dado via teclado, que quando inserido será armazenado em uma variável.
Para ficar mais fácil de visualizar, dá uma olhadinha nesse trecho de código:
Nele, nós declaramos uma variável numero e a inicializamos com o valor 0. Em seguida, um comando scanf é executado (linha 05).
O que isso significa?
Que o programa nesse momento está pausado e esperando algum dado do tipo int como entrada, que ao ser digitado será armazenado na variável numero.
Com esse exemplo, podemos explicar agora como o comando scanf é configurado. A primeira coisa que nós fazemos é digitar scanf, em seguida e entre parênteses digitamos entre aspas duplas a abreviação do tipo do dado esperado. Por fim, separado por vírgula, informamos o local que esse dado será armazenado antecedido do operador & (e comercial).
Nós temos as seguintes abreviações de tipos:
- %d para o tipo int;
- %f para o tipo float e para a variação double;
- %c para o tipo char;
- %lld para a variação long long int.
Vamos para mais um exemplo:
E se agora nós precisássemos ler como entrada um dado do tipo char?
Nós digitaríamos scanf e entre parênteses e aspas duplas colocaríamos a abreviação do tipo char, que é: %c. Além disso, separado por vírgula e antecipado do operador &, colocaríamos o local em que esse dado, que no caso do exemplo é a variável caractere.
De maneira geral, a utilização da função scanf é feita da seguinte forma:
Função printf
A função printf é utilizada para imprimir alguma informação na tela. Isso pode ser feito de três forma diferentes:
- Apenas texto;
- Apenas variáveis ou constantes;
- Texto com dados de variáveis ou constantes.
A primeira forma, consiste em apenas digitar o comando printf e entre parênteses e aspas duplas escrever aquilo que deverá ser impresso, por exemplo:
Igualzinho como fizemos quando desenvolvemos o nosso primeiro programa!
Vale ressaltar que o \n não é obrigatório, ele apenas sinaliza para o programa que naquele ponto da impressão uma linha deve ser pulada (quebra de linha). Isso ajuda a imprimir coisas mais organizadas.
A segunda forma, consiste em imprimir só os dados que estão armazenados em variáveis ou constantes, olha como podemos fazer isso:
Nessa forma de impressão, lembre-se do comando scanf em que a única diferença é a não utilização do operador & (e comercial). Basicamente, nós temos que escrever o comando printf e entre parênteses e aspas duplas colocarmos a abreviação do tipo da variável que será impressa. Por fim, separado por vírgula, escrevemos o nome da variável.
No terceiro e último caso, temos o misto entre as duas formas:
Onde escrevemos aquilo que queremos imprimir e adicionamos a abreviação dos tipos apenas onde dados armazenados por variáveis ou constantes deverão ser impressos. No caso do exemplo, como duas abreviações de tipo foram referenciadas, após o fechamento das aspas duplas e separado por vírgula uma lista das variáveis que foram referenciadas (nesse caso duas) também separadas por vírgula deve ser seguida.
Que tal resolvermos alguns exercícios de fixação agora? É uma ótima forma de não deixar esse novo conhecimento cair no esquecimento (até rimou).
Biblioteca stdio
Incluindo uma biblioteca
Função scanf
Função printf
Exercícios Resolvidos
Exercício Resolvido #1
Elaboração própria.
Explique o que são e para que servem as funções printf e scanf na linguagem C.
Passo 1
As duas funções fazem parte da biblioteca padrão stdio, essa biblioteca é caracterizada pela disponibilização de funções destinadas a entrada e saída de dados um programa. Portanto, para utilizar qualquer uma dessas funções, a biblioteca stdio deve ser inclusa.
Passo 2
Em relação as funções, o comando scanf() é responsável por realizar a leitura de dados em um programa, sempre que esse comando está presente, durante a execução, o programa será pausado e esperará uma entrada do usuário pelo teclado para retomar as suas atividades.
Já a função printf, é responsável por realizar a impressão de dados em um dispositivo de saída (geralmente monitor).
Resposta
Portanto, são as principais funções de entrada e saída da linguagem C.
Exercício Resolvido #2
Elaboração própria.
Faça um programa que leia um valor numérico inserido por um usuário e atribua ele para uma variável e depois imprima o dado presente nessa variável.
Passo 1
Primeiramente devemos definir o escopo do nosso programa e incluir as bibliotecas que ele utilizará.
Como de costume, iremos definir a função main e como o programa deve realizar a leitura de dados inseridos pelo usuário, devemos incluir a biblioteca padrão stdio.
Passo 2
Com um escopo definido, devemos declarar a variável que irá receber o dado inserido pelo usuário.
Como não foi especificado nenhum tipo no enunciado, devemos declarar com um tipo que seja capaz de abranger todos os possíveis valores numéricos, sejam eles inteiros ou decimais. Por esse motivo, o tipo que melhor se encaixa na descrição que nós fizemos é float.
Lembrete: não se esqueça de inicializar as variáveis declaradas, nesse caso inicializamos a variável com o valor 0.
Passo 3
Com a variável declarada, devemos requisitar a leitura do dado que será armazenado nela, para isso utilizaremos a função scanf.
Passo 4
Por fim, devemos imprimir o dado armazenado na variável , para isso utilizaremos a função printf.
Vale lembrar que a abreviação do tipo float é %f. Além disso, a impressão será seguida de uma quebra de linha por conta do comando \n
Resposta
Ei, a resposta está no passo a passo :)
Exercício Resolvido #3
Elaboração própria.
Faça um programa que:
- Leia a idade do usuário;
- Imprima essa idade da seguinte forma: “A sua idade é: ”.
Não se esqueça de quebrar uma linha no ato de impressão.
Passo 1
A primeira coisa que devemos fazer para desenvolver esse programa é definir o escopo e incluir as bibliotecas necessárias.
Como de costume, iremos declarar a função main e como o programa irá realizar a leitura e impressão de dados também incluiremos a biblioteca padrão stdio, que é responsável por disponibilizar funções de entrada e saída de dados na linguagem C.
Como iremos realizar a leitura de dados e impressão de informações, devemos declarar a biblioteca stdio.
Passo 2
Com o escopo definido, agora podemos declarar a variável que será responsável por armazenar o dado que será lido (idade do usuário).
Essa variável é do tipo int, pois uma idade sempre assumirá o valor inteiro. Além disso, essa variável foi declarada com o nome e já inicializada com o valor 0.
Passo 3
Com a variável já declarada e devidamente inicializada, podemos escrever o comando scanf() que irá esperar uma entrada pelo teclado do usuário (ato de leitura do dado):
Observe que o dado lido será armazenado na mesma variável declarada no passo anterior.
Passo 4
Por fim, basta realizarmos a impressão da frase “A sua idade é:” juntamente com o valor do dado armazenado pela variável utilizando o comando printf():
Vale lembrar que por se tratar de uma variável do tipo int a abreviação de tipo usada foi %d. Além disso, a impressão deve possuir comando de quebra de linha \n.
Resposta
Ei, a resposta está no passo a passo :)
Exercício Resolvido #4
Elaboração própria.
Faça um programa que receba como dados uma determinada hora e minuto de um usuário e imprima a frase “Agora são exatamente” seguida desses dados no formato convencional de horário “horas:minutos”.
Passo 1
A primeira coisa que devemos fazer é definir o escopo do programa, e, como ele irá utilizar as funções de leitura e impressão da linguagem C, incluiremos a biblioteca stdio.
Passo 2
Com a função main definida, podemos declarar as variáveis que serão responsáveis por armazenar os dados horas e minutos. Como horas e minutos são representados através de números inteiros, o tipo ideal para as variáveis é int.
Passo 3
Com as variáveis declaradas, podemos requisitar a leitura de dados para o usuário. Para isso, utilizaremos as funções scanf.
Passo 4
Por fim, basta realizarmos a impressão dos dados no formato exigido no enunciado. Para isso, utilizaremos a função printf.
Vale lembrar que essa impressão será seguida de uma quebra de linha por conta do comando \n.
Resposta
Ei, a resposta está no passo a passo :)
Exercício Resolvido #5
Elaboração própria.
Faça um programa que leia o dia, mês e ano inserido por um usuário e imprima esses dados no formato convencional brasileiro de data “dia/mês/ano”.
Passo 1
A primeira coisa que devemos fazer para desenvolver esse programa é definir o seu escopo e incluir a biblioteca stdio que é responsável por disponibilizar as funções de entrada e saída de dados.
Passo 2
Com a função main declarada, podemos declarar as variáveis responsáveis por armazenar os dados da de uma data. Como dias, meses e anos são representados por números inteiros, o tipo dessas variáveis deve ser int.
Passo 3
Com as variáveis declaradas, podemos realizar a requisição de entrada de dados para o usuário através da função scanf.
Passo 4
Por fim, basta realizarmos a impressão dos dados no formato de data dia/mês/ano utilizando a função printf.
Resposta
Ei, a resposta está no passo a passo :)
Exercício Resolvido #6
Elaboração própria.
Faça um programa que dada uma constante definida com o valor , imprima essa constante com apenas quatro casas decimais.
Passo 1
Antes de tudo, nós precisamos definir o escopo do programa e a constante . Além disso, será necessário incluir a biblioteca stdio que será responsável por disponibilizar as funções de entrada e saída de dados.
Passo 2
Por fim, nós só precisamos realizar a impressão da constante com duas casas decimais, para isso utilizaremos a função printf.
É importante lembrar que para limitar a quantidade de casas decimais impressas em duas, basta escrever como parâmetro da função printf o identificador %.2f ao invés de apenas %f.
Resposta
Ei, a resposta está no passo a passo :)
Exercício Resolvido #7
Elaboração própria.
Faça um programa que leia a idade e a massa de um usuário e imprima uma frase dizendo quantos anos ele tem e qual é a sua massa com duas casas decimais.
Passo 1
A primeira coisa que devemos fazer é definir o escopo do nosso programa e incluir as bibliotecas necessárias para a execução do mesmo.
Sendo assim, precisamos declarar a função main e incluir a biblioteca padrão stdio, pois utilizaremos as funções de leitura e impressão fornecidas pela linguagem C.
Passo 2
Agora nós podemos declarar as variáveis responsáveis por armazenar os dados que serão utilizados pelo programa (idade e massa).
Como uma idade em anos é representada por números inteiros, o tipo ideal da variável que irá armazenar esse dado é int. O oposto ocorre quando nós analisamos a massa, pois ela pode assumir infinitas casas decimais, nesse caso declararemos a variável que irá armazenar esse dado como float.
Lembrete: não se esqueça de inicializar (atribuir um valor inicial) em todas as variáveis declaradas, nesse caso utilizamos o valor .
Passo 3
Com as variáveis declaradas, nós podemos ler e armazenar os dados que serão inseridos pelo usuário. Para realizar a leitura tanto da idade quanto da massa utilizaremos a função scanf.
Observe que os parâmetros da função de leitura se diferenciaram, pois, as variáveis possuem tipos diferentes. Na primeira, utilizamos a abreviação de tipo int, já na segunda a abreviação do tipo float.
Passo 4
Por fim, nós podemos realizar a impressão da frase que exibirá as informações. Para isso, utilizaremos a função printf.
Dica: para limitar o número de casas decimais de uma exibição você pode utilizar a notação %.f, onde representa o número de casas decimais. Além disso, não se esqueça de utilizar \n para pular de linha.
Resposta
Ei, a resposta está no passo a passo :)
Exercício Resolvido #8
Elaboração própria.
Faça um programa que leia um caractere inserido por um usuário e imprima esse mesmo caractere em sua forma decimal definida pela tabela ASCII.
Passo 1
A primeira coisa que devemos fazer para desenvolver esse programa é definir o escopo e incluir as bibliotecas necessárias.
Como de costume, iremos declarar a função main e como o programa irá realizar a leitura e impressão de dados também incluiremos a biblioteca padrão stdio, que é responsável por disponibilizar funções de entrada e saída de dados na linguagem C.
Passo 2
Agora nós iremos declarar a variável que irá armazenar o caractere que será inserido pelo usuário, nada melhor do que o tipo char para isso.
Passo 3
Com a variável pronta para armazenar o caractere que será inserido pelo usuário do programa, podemos requisitar a leitura desse dado. Para isso nós utilizaremos a função scanf.
Passo 4
Nesse momento do desenvolvimento, nós já temos uma variável responsável por armazenar o dado requisitado pela função scanf para o usuário.
Porém, nós não podemos apenas imprimir o dado armazenado pela variável da maneira convencional, pois isso acarretaria a impressão de um caractere e não do seu valor numérico referente na tabela ASCII.
Para resolver isso, nós utilizaremos os nossos conhecimentos sobre tipos primitivos de dados, onde sabemos que todo char se trata de um int.
Relembrando: todo caractere do tipo char nada mais é do um número inteiro interpretado pelo programa em forma de caractere. Todas essas interpretações estão definidas em uma tabela denominada ASCII.
Passo 5
Dessa forma, basta realizarmos a impressão da variável passando para a função printf o identificador de um dado inteiro (%d) ao invés de um dado do tipo caractere (%c).
Isso fará com que o programa interprete o caractere armazenado na variável de tipo char como um número inteiro int.
E isso é exatamente o que nós queremos, uma vez que esse número inteiro é aquele que representa no tipo int o caractere anteriormente declarado no tipo char, assim como definido pela tabela ASCII.
Resposta
Ei, a resposta está no passo a passo :)