quarta-feira, 5 de abril de 2017

Recursos pouco utilizados da string de formatação do printf do C

Alguns recursos pouco utilizados da string de formatação do comando printf no C são muitas vezes ignorados ou desconhecidos. A imagem abaixo do código fonte "exemplo.c", foi feita a partir do vídeo: Recursos pouco conhecidos do printf. O vídeo demostra as mesmas informações aqui colocadas.


- Imprimir váriaveis pela posição dos argumentos

Uma das coisas realmente pouco conhecidas ou pouco utilizadas é que nós temos em C como mudar a ordem exibição sem alterar a ordem de argumentos. Isso é muito similar com a opção do Python:

'{1} {0}'.format('one', 'two')

Na imagem acima, linha 8, é demostrado como realizar isso em C. A formatação "%2$" informa ao printf que o segundo argumento deve ser utilizado, no caso da linha 8, é o valor contido na variável valor. Sendo assim, a formatação "%1$" diz que o primeiro argumento será utilizado.

printf("%5$6d", _, _, _, _, 42, _);

O exemplo acima diz que o valor 42 deve ser impresso. Vamos entender a linha acima. "%5$" diz que o quinto argumento após a formatação será utilizado e, nesse caso, é 42. A parte depois do dolar ($), "6d", simplesmente diz que o caracter inteiro deve ser impresso com tamanho mínimo de 6 caracteres e alinhado a direita. Nesse caso, o valor 42 possui apenas 2 caracteres. Sendo assim, o printf irá imprimir 4 espaços antes de imprimir o valor 42.


- Imprimir váriaveis alinhadas à esquerda

Sempre que utilizamos a formatação de algum argumento como "%d", para inteiros, ou "%s", para strings, ou "%f", para valores fracionários, os mesmos são alinhados a direita sem uma previsão de tamanho que a variável irá ocupar. Quando inserimos um numero entre o "%" e a letra, nos criamos uma previsão de tamanho mínimo para o campo sendo formatado. Mas, alguma vez já se perguntou como fazer o alinhamento a esquerda?

O alinhamento à esquerda pode ser feito informando um número negativo.

printf("%-6d", 42);

O exemplo acima faz com que o printf imprima o valor 42 e, em seguida, imprima 4 espaços. Ja que foi dito que a previsão do tamanho era 6 caracteres.


- Imprimir strings sem imprimir todo o conteúdo

A linha 9 da imagem acima, demostra como pode ser exibido apenas alguns caracteres da string e não toda a string. Vamos utilizar outro exemplo:

printf("%.9s", "aventuras de um devop");

Isso diz ao printf que uma string (%s) será utilizada, no caso "aventuras de um devop" é a string. Observe que depois do porcento (%), há um ponto e um número. Nesse caso do exemplo acima, o número é 9. Sendo assim, temos a mascara "%.9s", a string que esta sendo passada será impressa até o nono caracter incluso. Nesse caso, a saída desse programa será:

aventuras

E não

aventuras de um devop

No exemplo anterior, da linha 9 da imagem acima, a string deve ser impressa até o sétimo caracter incluso. Nesse caso, o valor impresso será "exemplo" e, não, "exemplo.c".

Nenhum comentário:

Postar um comentário