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 decontrole 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.
Veja como você está.