Usando o printf em C

Standard

Todos os dias, pelo menos um aluno me pergunta alguma coisa sobre o printf. Como essa função é chata!!! Em fim, vamos ver se consigo ajudar um pouco mais….

printf

A função printf() está disponível na biblioteca <stdio.h>, e seu objetivo é enviar um conjunto de caracteres para o dispositivo de saída padrão do sistema <stdout>. Em outras palavras, se considerarmos apenas o sistema operacional Windows 10, o que estra função faz é escrever um conjunto de caracteres no dispositivo padrão de saída que pode ser, por exemplo, o console. Em outros dispositivos ou outros sistemas operacionais, o dispositivo padrão de saída pode ser outro mas a função do printf() será a mesma, enviar um conjunto de caracteres para o dispositivo de saída.

A função printf() está disponível na biblioteca <stdio.h> e possui a seguinte declaração:

int printf(const char *format, ...)

Observe que uma característica interessante desta função é a possibilidade de uso de um número indefinido de argumentos. O único argumento que é indispensável é o primeiro. Este primeiro  argumento deve ser um conjunto de caracteres (string) contendo a formatação desejada para os caracteres que serão enviados a saída.

Os caracteres utilizados para a formatação serão considerados de acordo com três classes: (i) caracteres ordinários que são diretamente enviados para o dispositivo de saída; (ii) caracteres de especificação de conversões; (iii) caracteres de controle de impressão.

A distinção entre estes caracteres do string de formatação será determinada de acordo com o uso do caractere ‘%’ (porcento) ou  do caractere “\” (contra-barra). Chamamos a contra-barra de caractere de  escape. Quando o computador encontra uma contra-barra em uma string ele escapa da string para executar uma função de controle. Na tabela a seguir estão os caracteres de escape e seu significado.

Escape Hexadecimal ANSI Função
\0 0x00 NULL Caractere Nulo
\a 0x07 BELL Alarme
\b 0x08 BS Retrocesso
\f 0x0C FF Avançar Página
\n 0x0A LF Quebra de Linha
\t 0x09 HT Tab Horizontal
\v 0x0B VT Tab Vertical
\\ 0x5C \ Barra Invertida
\’ 0x27 Aspas Simples
\” 0x22 Aspas Duplas
\? 0x3F ? Interrogação

Quanto aos caracteres de formatação, teremos que tomar um pouco mais de cuidado. Comece dando uma olhada na tabela a seguir:

Comando entrada resultado 
%d signed int inteiro decimal (positivo ou negativo)
%u unsigned int inteiro decimal, sem sinal
%o unsigned int inteiro octal apenas sem sinal
%x, %X unsigned int inteiro hexadecimal, sem sinal, maiúscula ou minúscula
%z[n], %Z[n] unsigned int inteiro de base n, sem sinal
%f float número real
%e, %E float número real notação científica
%s String string
%c char caractere
%p Object objeto, por exemplo um ponteiro

Considere o programa abaixo.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
double d;
d=3.14;
printf("%e\n", d);
system("PAUSE");
return 0;
}

Neste programa estaos utilizando uma variável do tipo double e é especificada uma conversão de um tipo double para o formato [-]m.dddddde+/-xx que é o formato de impressão de números reais em notacão científica. Podemos especificar várias conversões em um único comando de formatação da função printf().

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
int i; float d;
i=123; d=3.14;
printf("%i %f\n", i, d);
system("PAUSE");
return 0;
}

As duas especificações de conversão (correspondente aos dois caracteres percento) exigem dois argumentos, o primeor será um int o segundo um float. O formato geral da especificação do string  de conversão é:

%[flags][width][.prec][hlL]type

Os campos opcionais estão entre colchetes mas devem estar na ordem especificada acima. A tabela abaixo descreve os “flags”

Flag Significado
posicione o valor à esquerda
+ o valor deve ser precedido de + ou –
espaço/branco o valor positivo deve ser precedido de 1 caractere em branco
0 preencha o valor com zeros
# preceder octais com 0, hex com 0x;
mostrar ponto decimal…

A tabela abaixo descreve o par largura.precisão especificados em ([width.prec]):

número tamanho mínimo da largura ou precisão
* o próximo argumento da printf é a largura
.numero numero minimo de digitos para int;
numero de casas decimais para e ou f
numero max de dig significativos para g
numero max de caracteres para s
.* o próximo argumento da printf é o valor da precisão
(interpretado como acima)

Um h especifica short int, um l (letra l minúscula) especifica long int. Vamos ver alguns outros exemplso de uso do printf(). Experimente rodar o seguinte código.

#include<stdio.h>

	main()
	{
		int a,b;
		float f1,f2;

		a = 27;
		b = a / 2;
		printf("%d\n",b);
		printf("%3d\n",b);
		printf("%03d\n",b);

		f1 = 15.3;
		f2 = c / 3;
		printf("%3.2f\n",f2);
	}

 

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *