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