O objetivo deste texto é explicar o funcionamento básico dos comandos para entrada e saída de
dados utilizando o linguagem C.
Para isso existem as funções
Outro conceito importante para as funções
1. Qual a diferença entre declarar e usar uma variável?
Lembramos que uma variável pode ser entendida como um "nome" associado à uma posição de memória do computador (e a um tamanho): a posição de seu bit inicial e o número de bits usados para representar aquele tipo de variável. Como a linguagem C é compilada, nela é necessário declarar cada variável e isso (geralmente) é feito no início da função. Uma vez que variável foi declarada, pode-se usá-la (recebendo valores ou em expressões).
Outro conceito essencial às variáveis é o de atribuição de valor. Sua sintaxe em C, e em muitas outras linguagens, é usar do lado esquerdo da atribuição um nome de variável e do lado direito da atribuição uma expressão aritmética válida. No código 1, existem três (3) atribuições, a saber: num = 3, r = num / 2 e r = num % 2. Como em todas as três (3) expressões, só ocorrem variáveis ou constantes inteiras, o resultado das expressões serão necessariamente valores inteiros, mesmo na divisão! Experimente.
Cód. 1. Código ilustrando a declaração de variáveis inteiras e divisão inteira (quociente e resto).#include <stdio.h>int main (void ) {int num=5, q, r;// declara 3 variaveis para inteiro, de nomes 'num' (sendo iniciada com valor 5), 'q' e 'r' // Em C, se uma expressao envolver apenas inteiros, o resultado necessariamente sera' inteiro // Os operadores (binarios) basicos C sao os seguintes: // +, -, *, /, % - respectivamente, para soma, subtracao, multiplicacao, divisao e resto da divisao q = num / 2;// 'q' recebera' o quociente da divisao inteira de 'num' por 2, entao recebera' 5/2 que sera' 2 r = num % 2;// 'q' recebera' o resto da divisao inteira de 'num' por 2, entao recebera' 5%2 que sera' 1 printf ("num=%d, %d/%d=%d, %d\%%d=%d\n" , num, num, 2, q, num, 2, r); }
Como no código 1, a variável num é do tipo inteiro, o mesmo ocorrendo com a constante 2, então a operação é feita
usando a precisão de inteiros (mas é possível obter o resultado em flutuante, bastaria usar num / 2.0) e
desse modo, seu resultado é o quociente da divisão inteira.
Existe outra possibilidade de "forçar" o resultado a ser flutuante, usando o coversor de tipo
para flutuante como em:
2. O que são "entradas de dados" e "saídas de dados"?
Um algoritmo é uma sequência finita de passos, que ao ser aplicado à um conjunto de dados (entradas) deve produzir sempre as mesmas saídas. Por exemplo, o algoritmo da divisão ao ser aplicado sobre valores fixados a e b, deve produzir sempre o mesmo valor q (de tal forma que q * b = a).
Por outro lado, um programa, em C ou em qualquer outra linguagem, nada mais é que a implementação de um algoritmo na referida linguagem. Desse modo, para este programa ser usado, o usuário (aquele que está executando) deve fornecer um conjunto de dados de entrada, na ordem adequada (pois a/b geralmente não é o mesmo que b/a), para que o programa possa ser executado e produzir as saída desejadas.
Podemos usar o mesmo exemplo da divisão para ilustar a necessidade dos dados de entrada adequados. Para que um algoritmo para a divisão de dois números reais seja adequadamente executado, devem ser fornecidos os dois valores reais, o primeiro será o numerador e o segundo será o denominador. Assim, se o usuário digitar apenas um valor, o programa ficará parado até que ele digite o segundo valor.
Saber mais3. Saídas de dados simples: inteiro, real e texto em C
A linguagem C preconiza o uso de formatador para cada tipo de variável, tanto para as entradas quanto para as saídas. Os formatadores básicos são:
Tipo de variável | Tipo em C | Leitura | Impressão |
---|---|---|---|
Inteiro | |||
Caractere | char a, b; | ||
Flutuante | |||
Duplo | double a, b; |
Em C a conversão entre inteiros e caracteres é direta, basta trocar o formatador. Isso é possível devido à conversão inteiro-binário e binário-caractere. Para isso utiliza-se a primeira tabela de representação de caracteres que se popularizou, a tabela ASCII. Para saber mais consulte o texto introdutório sobre caracteres. Na tabela 1, o código à esquerda ilustra como testar a tabela ASCII.
Exemplo de tabela ASCII | Exemplo de tabela numérica ∑i=010 0.5i |
---|---|
|
|
4. Entradas de dados em C utilizando apenas variáveis inteiras
Em C o processo para leitura de valores via teclado é tratado em lote, quer dizer,
durante a execução de um programa, a cada momento que o usuário digitar algo (uma sequência de caracteres)
e pressionar a tecla para registro (Enter), tudo o que foi digitado será armazenado em um reservatório
(em Inglês buffer) e a cada momento que o programa encontrar um comando para leitura será usado a
próxima "parte" disponível desse reservatório (armazendo-o em uma variável).
Para testar a existência desse reservatório, experimente testar o código 2, de dois modos:
Exemplo de código para entrada em C |
---|
|
Para ilustrar a compilação e execução do código da tabela 2, suporemos que ele tenha sido gravado com o nome
intr_leitura_impressao.c.
Assim, na figura 3, ao final de cada linha deve-se entender que o usuário tenha pressionado a tecla Enter:
na primeira linha o comando gcc -o intr_leitura_impressao.o intr_leitura_impressao.c invoca o compilador
gcc, compilando o programa intr_leitura_impressao.c e gerando o seu correspondente executável
com nome intr_leitura_impressao.o;
na segunda linha o usuário está invocando o executável intr_leitura_impressao.o e rodando-o;
na terceira linha está mensagem do primeiro
leo@paprika3:~/tutorial/codigos$ gcc -o intr_leitura_impressao.o intr_leitura_impressao.c leo@paprika3:~/tutorial/codigos$ ./intr_leitura_impressao.o Digite 3 itens inteiros, separados por espaco em branco: 2 3 45 i1=2, i2=3, j=45
Experimente copiar e colar o código da tabela 2 em seu ambiente para programação C preferido. Procure alterar o código até que esteja certo de ter assimilado a sintaxe e os detalhes de cada conceito aqui explorado.
5. Entradas de dados em C usando
Em C o processo para leitura de valores via teclado é tratado em lote, quer dizer,
durante a execução de um programa, a cada momento que o usuário digitar uma sequência de valores e pressionar
a tecla para registro (Enter), todos os valores digitados serão armazenado em um reservatório
(em Inglês buffer) e a cada momento que o programa encontrar um comando para leitura será usado a
próxima parte disponível do reservatório.
Para verficar a existência do reservatório, experimente testar o código 3, de dois modos:
Exemplo de código para entrada em C |
---|
|
Para ilustrar a compilação e execução do código da tabela 3, suporemos que ele tenha sido gravado com o nome
intr_leitura_impressao.c.
Assim, na figura 4, ao final de cada linha deve-se entender que o usuário tenha pressionado a tecla Enter:
na primeira linha o comando gcc -o intr_leitura_impressao.o intr_leitura_impressao.c invoca o compilador
gcc, compilando o programa intr_leitura_impressao.c e gerando o seu correspondente executável
com nome intr_leitura_impressao.o;
na segunda linha o usuário está invocando o executável intr_leitura_impressao.o e rodando-o;
na terceira linha está mensagem do primeiro
leo@paprika3:~/tutorial/codigos$ gcc -o intr_leitura_impressao.o intr_leitura_impressao.c leo@paprika3:~/tutorial/codigos$ ./intr_leitura_impressao.o Digite 9 itens, separados por espaco em branco (2 int, 5 char, 2 float): 2 3 ABD D E 0.5 2.3 i1=2, i2=3, c1=A, c1=B, c1=D, c1=D, c1=E, x=0.500000, y=2.300000
Experimente copiar e colar cada um dos códigos acima em seu ambiente para programação C preferido. Procure alterar o código até que esteja certo de ter assimilado a sintaxe e os detalhes de cada conceito aqui explorado.
Leônidas de Oliveira Brandão
http://line.ime.usp.br