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);
	}

 

 

 

 

Introdução ao MongoDB

Standard

O MongoDB é, de longe, o mais javascript da nova geração de bancos de dados. Trata-se de um banco de dados cuja estrutura de armazenamento se baseia em documentos que, por sua vez, são compostos de pares do tipo key/value. Esta arquitetura mimetiza a definição de objetos utilizada no javascript e de comunicação de dados utilizada no json. Se não for suficiente, o MongoDB utiliza a sintaxe do javascript como shell para a realização de todas as operações com o banco. Logo do mongodb

Continue reading

Entendendo Operadores em Javascript

Standard

Variáveis e dados são inúteis sem uma forma de manipulá-los, sem uma forma de alterá-los ou de fazer com que interajam entre si. Um programa é composto por uma série de frases (declarações) escritas em uma determinada linguagem de programação, que são compiladas, ou interpretadas, para que um determinado conjunto de ações seja executado. Ações complexas podem ser obtidas através da combinação, ou sequência, de ações simples. A forma mais simples de combinar, manipular e alterar variáveis em javascript para a criação de ações é através do uso de operadores.

Continue reading

Como instalar o node.js no Windows

Standard

Vamos instalar o node.js no Windows 8. Então, usando o Chrome navegue até a home page do node.js em http://www.nodejs.org, clique no botão verde escrito download bem no meio da página, salve o arquivo correspondente a arquitetura do seu sistema (node-v0.010.18.x64.msi, no meu caso) em um diretório seguro. Não, o desktop não é um diretório seguro. Salve em outro lugar.

Continue reading

O que é node.js

Standard

Pessoas menos otimistas que eu acreditam que o javascript é a linguagem de programação do futuro. Eu, que sofro de polianisse aguda, acredito que seja a linguagem de programação de hoje. Além de versátil, simples e flexível, o javascript adota, como poucas linguagens, os conceitos de orientação a objetos, tão caros a este velho escovador de bits. Só o suficiente para me deixar apaixonado.

Continue reading

Javascript – tipos de dados primitivos

Standard

Desenvolvido para o Netscape Navigator 2.0 por Brendan Eich, em 1996, a linguagem foi apresentada a ECMA International, uma organização europeia com caráter internacional cujo objetivo é criar normas para a padronização da tecnologia utilizada em comunicação e em equipamentos de consumo. Atualmente a norma ECMA-262 Edição 5 especifica o ECMAScript, (nome oficial da linguagem) e determina como funciona a linguagem de programação conhecida como Javascript, para o mundo livre e jscript para a Microsoft. Esta última removeu o “ava” do nome para não ter que enfrentar a detentora dos direitos de copyright da palavra java. 

Continue reading