As funções que resumem todas as funções de entrada e saída formatada no C são as funções printf() e scanf(). Um domínio destas funções é fundamental ao programador.
Protótipo:
int printf (char *str,...);
As reticências no protótipo da função indicam que esta função tem um número de argumentos variável. Este número está diretamente relacionado com a string de controle str, que deve ser fornecida como primeiro argumento. A string de controle tem dois componentes. O primeiro são caracteres a serem impressos na tela. O segundo são os comandos de formato. Como já vimos, os últimos determinam uma exibição de variáveis na saída. Os comandos de formato são precedidos de %. A cada comando de formato deve corresponder um argumento na função printf(). Se isto não ocorrer podem acontecer erros imprevisíveis no programa.
Abaixo apresentamos a tabela de códigos de formato:
Código |
Formato |
%c | Um caracter (char) |
%d | Um número inteiro decimal (int) |
%i | O mesmo que %d |
%e | Número em notação científica com o "e"minúsculo |
%E | Número em notação científica com o "e"maiúsculo |
%f | Ponto flutuante decimal |
%g | Escolhe automaticamente o melhor entre %f e %e |
%G | Escolhe automaticamente o melhor entre %f e %E |
%o | Número octal |
%s | String |
%u | Decimal "unsigned" (sem sinal) |
%x | Hexadecimal com letras minúsculas |
%X | Hexadecimal com letras maiúsculas |
%% | Imprime um % |
%p | Ponteiro |
Vamos ver alguns exemplos:
Código |
Imprime |
printf ("Um %%%c %s",'c',"char"); | Um %c char |
printf ("%X %f %e",107,49.67,49.67); | 6B 49.67 4.967e1 |
printf ("%d %o",10,10); | 10 12 |
É possível também indicar o tamanho do campo, justificação e o número de casas decimais. Para isto usa-se códigos colocados entre o % e a letra que indica o tipo de formato.
Um inteiro indica o tamanho mínimo, em caracteres, que deve ser reservado para a saída. Se colocarmos então %5d estamos indicando que o campo terá cinco caracteres de comprimento no mínimo. Se o inteiro precisar de mais de cinco caracteres para ser exibido então o campo terá o comprimento necessário para exibi-lo. Se o comprimento do inteiro for menor que cinco então o campo terá cinco de comprimento e será preenchido com espaços em branco. Se se quiser um preenchimento com zeros pode-se colocar um zero antes do número. Temos então que %05d reservará cinco casas para o número e se este for menor então se fará o preenchimento com zeros.
O alinhamento padrão é à direita. Para se alinhar um número à esquerda usa-se um sinal - antes do número de casas. Então %-5d será o nosso inteiro com o número mínimo de cinco casas, só que justificado a esquerda.
Pode-se indicar o número de casas decimais de um número de ponto flutuante. Por exemplo, a notação %10.4f indica um ponto flutuante de comprimento total dez e com 4 casas decimais. Entretanto, esta mesma notação, quando aplicada a tipos como inteiros e strings indica o número mínimo e máximo de casas. Então %5.8d é um inteiro com comprimento mínimo de cinco e máximo de oito.
Vamos ver alguns exemplos:
Código |
Imprime |
printf ("%-5.2f",456.671); | | 456.67| |
printf ("%5.2f",2.671); | | 2.67| |
printf ("%-10s","Ola"); | |Ola | |
Nos exemplos o "pipe" ( | ) indica o início e o fim do campo mas não são escritos na tela.
Protótipo:
int scanf (char *str,...);
A string de controle str determina, assim como com a função printf(), quantos
parâmetros a função vai necessitar. Devemos sempre nos lembrar que a função scanf()
deve receber ponteiros como parâmetros. Isto significa que as variáveis que não sejam
por natureza ponteiros devem ser passadas precedidas do operador &. Os
especificadores de formato de entrada são muito parecidos com os de printf():
Código |
Formato |
%c | Um único caracter (char) |
%d | Um número decimal (int) |
%i | Um número inteiro |
%e | Um ponto flutuante |
%f | Um ponto flutuante |
%h | Inteiro curto |
%o | Número octal |
%s | String |
%x | Número hexadecimal |
%p | Ponteiro |
Os caracteres de conversão d, i, u e x podem ser precedidos por h para indicarem que um apontador para short ao invés de int aparece na lista de argumento, ou pela letra l (letra ele) para indicar que que um apontador para long aparece na lista de argumento. Semelhantemente, os caracteres de conversão e, f e g podem ser precedidos por l para indicarem que um apontador para double ao invés de float está na lista de argumento.
AUTO AVALIAÇÃO
Veja como você está. Escreva um programa que leia (via teclado) e apresente uma matriz 3X3 na tela. Utilize os novos códigos de formato aprendidos para que a matriz se apresente corretamente identada. Altere os tipos de dados da matriz (int, float, double) e verifique a formatação correta para a identação. Verifique também a leitura e impressão de números hexadecimais.
Curso de C do CPDEE/UFMG - 1996 - 1999