¿Cómo escapar del signo% (por ciento) en el printf de C?

¿Cómo escapas del signo% cuando usas printf en C?

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

Puedes escapar publicando un doble ‘%’ como este: %%

Usando tu ejemplo:

 printf("hello%%"); 

El signo ‘%’ que se escapa es solo para printf. Si lo haces:

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

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

Como han dicho otros, %% escapará del%.

Sin embargo, tenga en cuenta que nunca debe hacer esto:

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

Siempre que tenga que imprimir una cadena, siempre, siempre, siempre imprima usando

 printf("%s", c) 

para evitar que un% incrustado cause problemas [violaciones de memoria, segfault, etc.]

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

 puts("hello%"); 

si hay un formato en la cadena:

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

Como se señala en los comentarios, puts agrega \n a la salida y fputs no.

Con ella misma …

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

Nitpick:
Realmente no se escapa del % en la cadena que especifica el formato para la familia de funciones printf() (y scanf() ).

El % , en la familia de funciones printf() (y scanf() ), inicia una especificación de conversión. Una de las reglas para la especificación de conversión establece que un % como especificador de conversión (inmediatamente después del % que inició la especificación de conversión) hace que se escriba un carácter '%' sin ningún argumento convertido.

La cadena realmente tiene 2 caracteres '%' dentro (a diferencia de los caracteres que se escapan: "a\bc" es una cadena con 3 caracteres no nulos; "a%%b" es una cadena con 4 caracteres no nulos).

usa un doble %%

Me gusta esto:

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

La barra invertida en C se usa para escapar caracteres en cadenas. Las cadenas no reconocerían el% como un carácter especial y, por lo tanto, no sería necesario escapar. Printf es otra cuestión: use %% para imprimir un%.

Sí, usa printf (“hello %%”); y está hecho.

Simplemente puede usar % dos veces, eso es "%%"

Ejemplo:

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

Puedes usar %%:

 printf("100%%"); 

El resultado es:

100%

está utilizando el especificador de formato incorrecto, debe usar %% para imprimir % . Tu código debería ser:

 printf("hello%%"); 

Lea más todos los especificadores de formato utilizados en C.

El doble ‘%’ también funciona 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 cadena en) csCurrentLine; “% ADD87C, 0.0500 *%”

Utilizar esta:

 #include  printf("hello%s%s"); 

Una lista completa de los especificadores de formato utilizados con printf se puede encontrar aquí:

http://www.mekong.net/tech/printf.htm