Pregunta

¿Cómo se puede escapar el signo% cuando se utiliza printf en C?

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

Solución

Puede escapar de ella mediante la publicación de un doble '%' como esto: %%

Usando su ejemplo:

printf("hello%%");

Escapar signo '%' es sólo para printf. Si lo hace:

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

Se imprimirá: This is a's value: %%

Otros consejos

Como otros han dicho, %% escapará a la%.

Tenga en cuenta, sin embargo, que nunca se debe hacer esto:

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

Cada vez que se tiene que imprimir una cadena, siempre, siempre, siempre imprimirlo utilizando

printf("%s", c)

para evitar que un% incrustado de causar problemas [violaciónes de memoria, segfault, etc]

Si no hay formatos en la cadena, se puede utilizar puts (o fputs ):

puts("hello%");

si hay un formato en la cadena:

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

Como se señaló en los comentarios, puts añade un \n a la salida y fputs no.

Con la misma ...

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

nitpick:
En realidad, no escapar de la % en la cadena que especifica el formato para el printf() (y scanf()) familia de funciones.

El %, en la familia printf() (y scanf()) de funciones, inicia una especificación de conversión. Una de las reglas para la especificación de conversión indica que una % como un especificador de conversión (inmediatamente después de la % que inició la especificación de conversión) provoca un carácter '%' para ser escrita con ningún argumento convertido.

La cadena realmente tiene 2 caracteres '%' dentro (en contraposición a escapar caracteres: "a\bc" es una cadena con 3 caracteres no nulos; "a%%b" es una cadena con 4 caracteres no nulos).

utilizar un doble %%

De esta manera:

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

La barra invertida en C se utiliza para escapar caracteres en cadenas. Las cadenas no se reconocen% como un carácter especial, y por lo tanto no sería necesario ningún escape. Printf es otra cuestión:. %% utilizar para imprimir un%

Sí, uso printf ( "hola %%"); y se hace.

Usted puede simplemente utilizar % dos veces, es decir "%%"

Ejemplo:

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

Puede utilizar %%:

printf("100%%");

El resultado es:

  

100%

está utilizando especificador de formato incorrecto se debe utilizar para la impresión %% %. El código debe ser:

printf("hello%%");  

todos los especificadores de formato utilizado en C .

El '%' doble trabaja también en" .formato (...). Ejemplo (con iDrawApertureMask == 87, fCornerRadMask == 0.05): csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ; da el valor deseado y esperado de (contenido de la cadena en) csCurrentLine;     "ADD87C%, 0,0500% *"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top