Tutorial de I/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:
Especificador para printf e scanf
8 bits -128 a 127
16 bits -32768 a 32767
32 bits 3.4E-38 a 3.4E+38
64 bits 1.7E-308 a 1.7E+308
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 */
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:
Um caracter simples.
Inteiro na notação decimal.
Inteiro na notação octal (não esquecer o zero do número, que deve ser incluido explicitamente).
Inteiro na notação hexadecimal (não esquecer o '0x' do número).
Inteiro sem sinal em notação decimal.
float ou double, imprimido em notação decimal de acordo com a especificação adicional descrita abaixo.
float ou double, imprimido em notação cientifica de acordo com a especificação adicional descrita abaixo.
float 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.
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:
puts("Digite o seu 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);
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.