Pergunta

Como você escapar o sinal% quando se utiliza printf em C?

printf("hello\%"); /* not like this */
Foi útil?

Solução

Você pode fugir dela, colocando um '%' double assim: %%

Usando o seu exemplo:

printf("hello%%");

sinal Escaping '%' é apenas para printf. Se você fizer isso:

char a[5];
strcpy(a, "%%");
printf("This is a's value: %s\n", a);

Ele irá imprimir: This is a's value: %%

Outras dicas

Como já foi dito, %% vai escapar do%.

Note, no entanto, que você nunca deve fazer isso:

char c[100];
char *c2;
...
printf(c); /* OR */
printf(c2);

Sempre que você tem que imprimir uma string, sempre, sempre, sempre imprimi-lo usando

printf("%s", c)

para evitar uma% incorporado de causar problemas de memória, [violações segfault, etc]

Se não houver formatos na string, você pode usar puts (ou fputs ):

puts("hello%");

Se houver um formato na string:

printf("%.2f%%", 53.2);

Como observado nos comentários, puts acrescenta um \n para a saída e fputs não.

Com ela mesma ...

printf("hello%%"); /* like this */

Nitpick:
Você realmente não escapar da % na string que especifica o formato para a família de funções printf() (e scanf()).

O %, na família printf() (e scanf()) de funções, inicia uma especificação de conversão. Uma das regras para os estados de especificação de conversão que um % como um especificador de conversão (imediatamente após a % que iniciou a especificação de conversão) faz com que um personagem '%' a ser escrito com nenhum argumento convertido.

A cadeia realmente tem 2 caracteres '%' dentro (em oposição ao escape de caracteres: "a\bc" é uma cadeia com 3 caracteres não nulos; "a%%b" é uma cadeia com 4 caracteres não nulos).

usar um duplo %%

Como esta:

printf("hello%%");
//-----------^^ inside printf, use two percent signs together

A barra invertida em C é usado para escapar caracteres em cordas. Cordas não reconheceria% como um caractere especial, e, portanto, nenhuma fuga seria necessário. Printf é outra questão:. Uso %% para imprimir uma%

Sim, uso printf ( "Olá %%"); e ele é feito.

Você pode simplesmente usar % duas vezes, que é "%%"

Exemplo:

printf("You gave me 12.3 %% of profit");

Você pode usar %%:

printf("100%%");

O resultado é:

100%

você estiver usando especificador de formato incorreto você deve usar %% para imprimir %. O código deve ser:

printf("hello%%");  

Leia mais todos os especificadores de formato usado em C .

O '%' double funciona também em" .format (...). Exemplo (com iDrawApertureMask == 87, fCornerRadMask == 0,05): csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ; dá o valor desejado e esperado do conteúdo de cadeia (em) csCurrentLine; "% ADD87C, 0,0500 *%"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top