Linguagem C Básico Aula 03: Entrada de dados e Operadores

Entrada de Dados

Entrada de dados

 No curso de algoritmos vimos que as entradas de dados eram feitas através da função leia(nome_da_variável) que permitia dar um prompt para o usuário digitar um valor que seria armazenado pela variável informada como parâmetro dentro dos parentes. Tal variável precisava ser declarada previamente.

    A ideia geral permanece a mesma na linguagem C, isto é, também teremos que declarar uma variável para armazenar a informação e utilizaremos a função scanf() para abrir um prompt para digitação, com alguns detalhes a mais.

    No entanto é preciso que fique claro que estaremos abordando essa forma de entrada de dados apenas para fins didáticos, pois em Sistemas Embarcados, na maioria das vezes as entradas são provenientes de dados fornecidos por sensores e atuadores como botões, potenciômetros, chaves, etc. Raros serão as situações onde digitaremos dados.

    Outra situação para entrada de dados é através da leitura de arquivos que veremos futuramente.

Usando o scanf()

    Essa função faz parte do arquivo de cabeçalho padrão de entradas e saídas por isso exige o uso do #include <stdio.h> no início da arquivo. Quanto a forma de uso geralmente segue essa estrutura:

scanf("String de formatação das variáveis", &variáveis separadas por vírgulas)

    Veja que eu falei em variáveis ou seja estamos falando de mais de uma, porque, diferente do leia() do Portugol, o scanf() permite a digitação e armazenamento de mais de uma variável que será finalizada por um ENTER. No entanto essa não é uma prática recomendável, já que a maioria do usuários tem o hábito de digitar uma informação de cada vez.

    Observe também que eu falei de strings de formatação, pois semelhante ao printf(), o scanf() também utiliza os código especiais que vimos anteriormente para informar ao programa que se trata de um dado float ou inteiro ou caractere através do uso de %f ou %d ou %c, respectivamente. A literatura os chama de "especificadores de formato".

    Já o operador & que antecede o nome da variável informa ao compilador informa o endereço de memória em que a variável foi alocada. Exemplo de scanf() para digitação de uma variável chamada preco do tipo float:

scanf("%f", &preco)

Operadores

    Assim como visto no Portugol também teremos os operadores aritméticos, relacionais e lógicos para operações e expressões matemáticas usadas na nossa lógica de programação. Ao longo do curso daremos exemplos de uso de cada um deles. 

    Por enquanto ficaremos apenas nos operadores aritméticos básicos, mas segue abaixo uma relação mais completa:

Operadores aritméticos, condicionais e lógicos da Linguagem C
Operadores aritméticos, condicionais e lógicos da Linguagem C

    Esclarecendo que temos o operador de atribuição = que é usado para atribuir um valor a uma variável ou constante e que NÃO deve ser confundido com o operador condicional == que é usado dentro de condições que veremos em breve.

Programa de exemplo

    Começaremos com algo bem básico. Digamos que eu queira fazer um pequeno programa que peça ao usuário a digitação de dois números, um de cada vez, depois some e mostre o resultado. Usaremos comentários na mesma linha para esclarecer as instruções. 

    Você pode acessar o GDB online, selecionar o C no item language e copiar+colar o seguinte código:

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int n1,n2; //declarando as variaveis n1 e n2 como inteiros
  5.     printf("Digite n1: "); //mostrando uma mensagem na tela
  6.     scanf("%d",&n1);  //permitindo a entrada da variável n1
  7.     printf("Digite n2: ");
  8.     scanf("%d",&n2);
  9.     printf("Somando n1 e n2: %d",n1+n2); //mostrando o resultado
  10.     return 0;
  11. }

    É um programa bem básico que não merece muito comentário exceto pela linha 10 que parece mais complicada. Nela vemos a concatenação (união) da frase "Somando n1 e n2:" com o resultado da soma tendo o %d como especificador de formato para uma saída de número inteiro.

    Vejamos agora um exemplo já discutidos no curso de Algoritmos, mas desta vez com as instruções em linguagem C. Mais uma vez convido aqueles que não fizeram o curso anterior a fazê-lo, mas sempre que for possível, colocarei um link direcionando a respectiva aula onde isso já foi abordado.

    Digamos que eu queira fazer um pequeno programa para pegar a nota de duas provas, calcular uma média aritmética das notas e mostrar o resultado em tela. Em Portugol teríamos um código assim:

  1. programa {
  2.         funcao inicio () {
  3.                 real nota1,nota2
  4.                 escreva("Digite a nota1:  ")
  5.                 leia(nota1)
  6.                 escreva("Digite a nota2:  ")
  7.                 leia(nota2)
  8.                 escreva("A média final: "+(nota1+nota2)/2)
  9. }

    ... que convertido para a linguagem C ficaria assim:

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     float nota1,nota2;
  5.     printf("Digite a nota1: "); 
  6.     scanf("%f",&nota1);  
  7.     printf("Digite a nota2: ");
  8.     scanf("%f",&nota2);
  9.     printf("Média Final: %.1f",(nota1+nota2)/2); 
  10.     return 0;
  11. }

    Repare que na linha 10 já utilizamos o especificador de formato para float, especificando que a saída seria com uma casa decimal, isto é, %.1f . Os parenteses estão apenas informando que a operação de soma deve ser feita antes da divisão por 2.

    Na próxima aula abordaremos estruturas de controle de fluxo condicionais que nos permitirão evoluir um pouco mais. 


Próxima Aula                                                                                                                        Aula Anterior

Referências

DAMAS, L. Linguagem C. Rio de Janeiro: LTC Editora, 2007.

GBD ONLINE. C for Beginners. Disponível em: <https://learn.onlinegdb.com/c_for_beginners> Acesso em 05 ago. 2024.

GBD ONLINE. C Programming Examples Disponível em: <https://learn.onlinegdb.com/c_program_examples> Acesso em 05 ago. 2024.

W3SCHOOLS. C Tutorial. Disponível em: <https://www.w3schools.com/c/index.php> Acesso em 05 ago. 2024.