Como você escapa do sinal% ao usar printf
em C?
printf("hello\%"); /* not like this */
c
printf
format-string
Chris_45
fonte
fonte
%
é específicoprintf
, correto?\045
é um escape em tempo de compilação que faz parte do idioma e se transformará%
quando compilado.printf
é uma função de tempo de execução, portanto, lida com bytes da sua string, não com o código-fonte C e possui suas próprias seqüências de escape que fazem parte da função . Em resumo,printf
é um "idioma dentro de um idioma" eprintf("This is a's value: %s\n", a);
dá o mesmo resultado queprintf("This is a's value: \045\0163\012", a);
.printf("hello%c", '%');
. No entanto,%%
é melhor porque não usa outro argumento.Como já foi dito, %% escapará do%.
Observe, no entanto, que você nunca deve fazer isso:
Sempre que você precisar imprimir uma sequência, sempre, sempre, sempre a imprima usando
para impedir que um% incorporado cause problemas [violações de memória, segfault, etc.]
fonte
Se não houver formatos na cadeia, você pode usar
puts
(oufputs
):se houver um formato na sequência:
Conforme observado nos comentários,
puts
anexa\n
a à saída efputs
não.fonte
puts
. Eu nunca penseiputs
em imprimir cordas e pulei direto paraprintf
. Não mais.Com ele mesmo ...
fonte
Nitpick:
Você realmente não escapa da
%
string que especifica o formato para a família de funçõesprintf()
(escanf()
).O
%
, naprintf()
(escanf()
) família de funções, inicia uma especificação de conversão. Uma das regras para a especificação de conversão afirma que um%
como especificador de conversão (imediatamente após o%
que iniciou a especificação de conversão) faz com que um'%'
caractere seja gravado sem nenhum argumento convertido.A string realmente possui 2
'%'
caracteres (em oposição a caracteres de escape:"a\bc"
é uma string com 3 caracteres não nulos;"a%%b"
é uma string com 4 caracteres não nulos).fonte
use um %% duplo
fonte
Como isso:
fonte
A barra invertida em C é usada para escapar caracteres em seqüências de caracteres. Strings não reconheceriam% como um caractere especial e, portanto, nenhuma fuga seria necessária. Printf é outra questão: use %% para imprimir um%.
fonte
Você pode usar %%:
O resultado é:
fonte
você está usando um especificador de formato incorreto
%%
para impressão%
. Seu código deve ser:Leia mais todos os especificadores de formato usadas em C .
fonte
Sim, use printf ("olá %%"); e está feito.
fonte
Você pode simplesmente usar
%
duas vezes, ou seja,"%%"
Exemplo:
fonte
O duplo '%' funciona também em ".Format (…). Exemplo (com iDrawApertureMask == 87, fCornerRadMask == 0,05):
csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ;
fornece o valor desejado e esperado de (conteúdo da string em) csCurrentLine;"% ADD87C, 0,0500 *% "fonte