Tutorial de I/O

:: Introdução

Este é o que eu posso chamar de meu primeiro tutorial em C.

Esse não é um tutorial que pode ser considerado para iniciantes na linguagem C, pois antes deve-se ter uma noção de como C cuida de variaveis e outros dados, como essa é uma discussão um pouco avançada, falarei sobre ela com mais tempo no próximo tutorial. Este pode ser considerado um tutorial para quem já tem noções de programação.

Irei tentar explicar a utilização das funções printf, scanf, gets e puts.

: printf :

printf é a função que faz impressão na tela. Ela não tem muita explicação para ser feita. A não ser o uso de variaveis em seu contexto.

Como C é uma linguagem considerada de médio nível, o tratamento de variaveis é realizado de uma forma que poderia ser considerada equivocada, porém com o uso, você descobre que a forma que C utiliza é que o torna uma linguagem de programação tão bem aceita.

O primeiro exemplo não poderia deixar de ser esse:

#include<stdio.h> /* Esta é a chamada para a biblioteca stdio,
                     Que é a Standard Input/Output, ou, Padrão
                     para entrada e saída */
int main() { /* Essa é a chamada do programa principal, todo programa em C
            deve ter essa chamada para ser iniciado - em alguns ambientes ela deve começar com void main */
  printf("Oi, Mundo!"); /* Aqui a função printf em sí, ela está apenas
                              "ecoando" na tela o que está escrito entre
                              aspas, é o que se deve considerar uma string */
}


Agora um pouco sobre variaveis, as declarações de variaveis em C, são feitas no formato de:

tipo lista de variaveis;

Os tipos padrão de variaveis em C são:

TIPOTAMANHOESCALAEspecificador para printf e scanf
char8 bits-128 a 127%c
int16 bits-32768 a 32767%i
float32 bits3.4E-38 a 3.4E+38%f
double64 bits1.7E-308 a 1.7E+308%d


Então como escrever o mesmo programa acima utilizando uma variavel de tipo caracter (char) recebendo a mensagem de "Oi, Mundo":
#include<stdio.h> /* As explicações anteriores não serão retomadas */
main() {
  char msg[]="Oi, Mundo!"; /* Aqui temos uma declaração de variavel do
                              tipo caracter. Me pergunte porque os []
                              e eu te respondo dizendo que em C uma frase,
                              ou string como preferir, é apenas um
                              conjunto de variaveis do tipo caracter e
                              [] são os delimitadores da quantidade de
                              repetições do mesmo tipo de dado */
  printf("%s",msg); /* Nota-se agora uma particularidade de C, você precisa
                       especificar que tipo de variavel você está
                       utilizando. E é para isso que serve o %s */
}


Para explicar melhor esse printf, você deve entender o conceito do mesmo:

printf retorna o que está entre aspas de seu primeiro argumento - argumentos são separados por vírgula - de acordo com uma predefinição que ao encontrar os especificadores de variáveis, busca em seus próximos argumentos os valores da variavel exposta de acordo com a especificação dada.

Então você deve se perguntar porque foi utilizado %s no lugar de %c que foi dado na tabela anterior ao exemplo. E a explicação é simples, um caracter é diferente de um conjunto de caracteres e %s específica um conjunto de caracteres.

A tabela completa de especificadores padrões segue abaixo:

ESPECIFICADORDESCRIÇÃO
%cUm caracter simples.
%dInteiro na notação decimal.
%oInteiro na notação octal (não esquecer o zero do número, que deve ser incluido explicitamente).
%xInteiro na notação hexadecimal (não esquecer o '0x' do número).
%uInteiro sem sinal em notação decimal.
%sConjunto de caracteres.
%ffloat ou double, imprimido em notação decimal de acordo com a especificação adicional descrita abaixo.
%efloat ou double, imprimido em notação cientifica de acordo com a especificação adicional descrita abaixo.
%gfloat ou double, imprimido como um %e ou %f.


: scanf :

O scanf é uma função que lê dados do teclado para uma variavel. Simples não? Ele utiliza a mesma tabela de especificadores acima.
#include<stdio.h> /* As explicações anteriores não serão retomadas */
main() {
  int numero; /* Aqui temos uma declaração de variavel do
                 tipo inteiro. */
  scanf("%d",&numero); /* O %d é a especificação de inteiro em
                          notação decimal e o sinal de & é obrigatório antes do nome
                          da variavel. Isso se explica com ponteiros, o que não
                          falarei sobre agora. */
  printf("O numero lido foi: %d",numero);
}


Não se tem muito o que falar de scanf, ele é simplesmente isso, só precisa prestar atenção ao seu modelo: scanf("especificador",&variavel);

: gets , puts :

O modo como foi criado C para sua flexibilidade, deixa algumas coisas obscuras, o que pode confundir alguns programadores novatos na linguagem. Como por exemplo lidar com strings, strings são um conjunto de caracteres, C trata string como um vetor do tipo char. Um vetor que se finaliza com o caracter "/0", ou seja, a leitura correta de uma string é ler caracter a caracter até encontrar um "/0" e não até o final do tamanho do vetor.

Outras coisas como o modo de tratar a entrada e saída de dados, também faz com que o tratamento de strings tenha que ser especial. Caso você tente fazer um scanf de uma string e colocar na mesma um espaço, o seu programa não irá funcionar como deveria. Para evitar esses "erros" que foram criadas as funções de gets e puts. Que são respectivamente de leitura e escrita de strings.

O seu uso é mais simples ainda, como são especificas, não precisam de especificadores. Vamos a um exemplo prático:
#include<stdio.h>
main() {
  char nome[80];
  puts("Digite o seu nome:");
  gets(nome);
  printf("Você digitou: %s",nome);
}


Só um pequeno porém, apesar de eu não ter utilizado puts com variavel, ele também pode mostrar variaveis de string. puts(variavel);

:: Conclusão

Enfim, acho que o primeiro tutorial é isso. Não é muito abrangente, mas é direto e acho que cumpre ao que se destina, que não é de forma alguma ensinar C, mas dar uma boa idéia de como utilizar as primeiras funções de entrada e saída de dados em C.

Agora é aguardar as dúvidas, tudo que for perguntado e que eu achar interessante estarei incluindo em um apêndice desse mesmo arquivo. Abraços.
Tutorial escrito por Everson -NoBIOS- Santos Araujo <everson» por.com.br>
Disponível em http://nobios.por.com.br/
Última revisão 18/09/2002

Licença Creative Commons
Esta obra está licenciado sob uma Licença Creative Commons.