Curso de C

Entrada e Saída Formatada


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.

printf

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.

scanf

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.


    P


Curso de C do CPDEE/UFMG - 1996 - 1999