# printf_conversion

Especificações de conversão de mprintf, msprintf, mfprintf

## Descrição

Cada especificação de conversão no parâmetro format de `mprintf` , `msprintf` , `mfprintf` possui a seguinte sintaxe:

- Um sinal % (porcento).

- Zero ou mais `options` (opções), que modificam o significado da especificação de conversão. A lista seguinte contem os caracteres `option` e seus significados:

- Alinhe à esquerda, dentro do campo, o resultado da conversão.

- Comece o resultado de uma conversão com sinal com um sinal (+ ou -).

- Prefixe um caractere de espaço ao resultado se o primeiro caractere de uma conversão com sinal não for um sinal. Se ambas as opções (espaço) e + aparecerem, a opção (space) é ignorada.

- Converta o valor para uma forma alternativa. Para as conversões `c`, `d`, `i`, `s`, e `u`, a opção `#` não possui efeito. Para a conversão `o`, `#` aumenta a precisão para forçar o primeiro dígito do resultado a ser 0 (zero). Para as conversões `x` e `X`, um valor não-nulo possui 0x ou 0X prefixado a ele. Para as conversões `e, E, f, g,` e `G`, o resultado sempre contém ponto decimal, Mesmo que nenhum dígito o siga. Para as conversões `g` e `G`, zeros por último não são removidos.

- Aumente a largura do campo utilizando zeros à esquerda (seguindo qualquer indicação de sinal ou base) para as conversões `d`, `i`, `o`, `u`, `x`, `X`, `e`, `E`, `f`, `g`, e `G`; nenhum aumento de espaço é realizado. Se ambos os indicadores `0` e `\-` (barra) aparecerem, o indicador `0` é ignorado. Para as conversões `d`, `i`, `o` `u`, `x`, e `X`, se uma precisão for especificada, o indicador `0` também é ignorado.

- Um string de dígitos decimais opcional que especifica a largura mínima do campo. Se o valor convertido tiver menos caracteres que a largura do campo, o campo é aumentado à esquerda até o comprimento especificado pela largura do campo. Se a opção de ajuste à esquerda for especificada, o campo é aumentado pela direita.

- Uma precisão opcional. A precisão é um ponto `.` seguido por um string de dígito decimal. Se nenhuma precisão for fornecida, o parâmetro é tratado como 0 (zero). A precisão especifica:

  - O número mínimo de dígitos a aparecerem nas conversões `d`, `u`, `o`, `x`, ou `X`

  - O número de dígitos a aparecerem após o ponto decimal nas conversões `e`, `E`, e `f`

  - O número máximo de dígitos significativos para as conversões `g` e `G`

  - O número máximo de caracteres a serem impressos a partir de um string em uma convesão `s`

- O caractere que indica o tipo de conversão a ser aplicada:

- Não realiza conversão. Exibe %.

- Aceita um valor inteiro e o converte para notação decimal com sinal. A precisão especifica o número mínimo de dígitos a aparecer. Se o valor sendo convertido puder ser representado em menos dígitos, ele é expandido com zeros à esquerda. A precisão padrão é 1. O resultado de se converter um valor zero com uma precisão de zero é um string nulo. A especificação de uma largura de campo com zero como caractere mais à esquerda faz com que o valor da largura do campo seja preenchido com zeros à esquerda.

- Aceita um valor inteiro e o converte para a notação decimal sem sinal. A precisão especifica o número mínimo de dígitos a aparecer. Se o valor sendo convertido puder ser representado em menos dígitos, ele é expandido com zeros à esquerda. A precisão padrão é 1. O resultado de se converter um valor zero com uma precisão de zero é um string nulo. A especificação de uma largura de campo com zero como caractere mais à esquerda faz com que o valor da largura do campo seja preenchido com zeros à esquerda.

- Aceita um valor inteiro e o converte para a sua notação octal sem sinal. A precisão especifica o número mínimo de dígitos a aparecer. Se o valor sendo convertido puder ser representado em menos dígitos, ele é expandido com zeros à esquerda. A precisão padrão é 1. O resultado de se converter um valor zero com uma precisão de zero é um string nulo. A especificação de uma largura de campo com zero como caractere mais à esquerda faz com que o valor da largura do campo seja preenchido com zeros à esquerda. Não é implicado um valor octal para a largura do campo.

- Aceita um valor inteiro e o converte para a sua notação hexadecimal sem sinal. As letras ``abcdef'' são utilizadas para a conversão `x`; as letras ``ABCDEF'' são utilizadas para a conversão `X`. A precisão especifica o número mínimo de dígitos a aparecer. Se o valor sendo convertido puder ser representado em menos dígitos, ele é expandido com zeros à esquerda. A precisão padrão é 1. O resultado de se converter um valor zero com uma precisão de zero é um string nulo. A especificação de uma largura de campo com zero como caractere mais à esquerda faz com que o valor da largura do campo seja preenchido com zeros à esquerda.

- Aceita um valor float ou double e o converte para a sua notação decimal no formato %[\-]`ddd.ddd`. O número de dígitos após o ponto decimal é igual à especificação de precisão.

- Se nenhuma precisão for especificada, a saída possui seis dígitos

- Se a precisão for zero, nenhum ponto decimal aparece e o sistema imprime na saída o valor inteiro mais próximo de `value`.

- Se a saída possui um ponto decimal, pelo menos um dígito é posto antes dele.

- Aceita um real e o converte para a sua forma exponencial %[\-]`d.ddde`+/\-`dd`. Há um dígito antes do ponto decimal, e o número de dígitos após o ponto decimal é igual à especificação de precisão.

- Se nenhuma precisão for especificada, a saída são seis dígitos

- Se a precisão for zero, nenhum ponto decimal aparece.

- A caractere de conversão `E` produz um número com o caractere 'E', ao invés de 'e' antes do expoente. O expoente sempre contém pelo menos dois dígitos. Se o valor for zero, o expoente é zero.

- Aceita um real e o converte no estilo dos caracteres de conversão `e`, `E`, ou `f`, com a precisão especificando o número de dígitos significativos. Zeros por último são removidos. Um ponto decimal aparece apenas se for seguido de um dígito. O estilo depende do valor convertido. O resultado é o estilo `e` (`E`, se `G` é o indicador utilizado) apenas se o expoente resultante da conversão for menor do que -4, ou se for maior do que ou igual à precisão.

- Aceita e exibe um valor inteiro convertido em um caractere.

- Aceita um valor string e exibe caracteres do string até o fim ou até que o número de caracteres indicados pela precisão seja alcançado. Se nenhuma precisão for especificada, todos os caracteres até o fim são exibidos.

Uma largura de campo ou uma precisão podem ser indicadas por `*` (asterísco) ao invés de um string de dígito. Neste caso, um parâmetro de valor inteiro provê a largura do campo ou a precisão. O parâmetro de valor convertido para saída não é buscado até que a letra de conversão seja alcançada, então os parâmetros especificando o comprimento de campo ou precisão devem aparecer antes do valor a ser convertido (se houver algum).

Se o resultado da conversão for maior que a largura do campo, o campo é expandido para conter o resultado convertido.

A representação do sinal de mais depende da opção de formatação especificada, se `+` ou (espaço).

## Ver Também

- mprintf
- mfprintf
- msprintf