quarta-feira, 22 de agosto de 2018

C: Imprimindo percentual

É muito comum uma saída com percentual, e com o símbolo '%' depois do número, mas a printf() usa este caractere para formatação de saída. Qual é a solução?

Já vi muitas vezes sendo resolvido assim:

printf( "%f %s\n",pecent,"%" );

Isto está errado, realmente muito errado. Mas por que está errado, e qual é a solução?

O último parâmetro desta printf() é uma string com o caractere '%' e um nulo ao final (Toda string em C termina com um nulo.). Esta string fica alocada em algum lugar na área de dados do programa, e o endereço deste local é passado como parâmetro para a printf().

Notou que isto usa espaço na área de dados, e ainda empilha o endereço deste espaço como parâmetro da printf().

Tem uma solução menos ruim. No lugar da string pode-se colocar o caractere:

printf( "%f %c\n",percent,'%' );

O terceiro parâmetro não será mais o endereço de uma string, e sim, o caractere, e não existira uma string referente a isto na área de dados do programa.

Já melhorou, mas não é a solução correta. Eis a solução correta:

printf( "%f %%\n",percent );

Neste caso nem tem o terceiro parâmetro.

Sim, quando a printf() acha um '%' seguindo um '%' ela coloca um '%'. É a solução de longe mais simples, e a correta, para o caso.

Nenhum comentário:

Postar um comentário