¿Cómo escapas del signo% cuando lo usas printfen C?
printf("hello\%"); /* not like this */
c
printf
format-string
Chris_45
fuente
fuente

%es específicoprintf, ¿correcto?\045es un escape en tiempo de compilación que es parte del lenguaje y se convertirá en%cuando se compila.printfes una función de tiempo de ejecución, por lo que trata con los bytes de su cadena, no con el código fuente C, y tiene sus propias secuencias de escape que son parte de la función . En resumen,printfes un "lenguaje dentro de un idioma", yprintf("This is a's value: %s\n", a);da el mismo resultado queprintf("This is a's value: \045\0163\012", a);.printf("hello%c", '%');. Sin embargo,%%es mejor porque no usa otro argumento.Como otros han dicho, %% escapará al%.
Tenga en cuenta, sin embargo, que nunca debe hacer esto:
Siempre que tenga que imprimir una cadena, siempre, siempre, siempre imprímala usando
para evitar que un% incrustado cause problemas [violaciones de memoria, segfault, etc.]
fuente
Si no hay formatos en la cadena, puede usar
puts(ofputs):si hay un formato en la cadena:
Como se señaló en los comentarios,
putsagrega a\na la salida yfputsno.fuente
puts. Nunca penséputsen imprimir cadenas y salté directamente aprintf. Ya no.Consigo mismo ...
fuente
Nitpick:
Realmente no escapas de
%la cadena que especifica el formato para elprintf()(yscanf()) familia de funciones.El
%, en laprintf()(yscanf()) familia de funciones, inicia una especificación de conversión. Una de las reglas para la especificación de conversión establece que a%como especificador de conversión (inmediatamente después del%que inició la especificación de conversión) causa un'%'que se escriba carácter sin argumento convertido.La cadena realmente tiene 2
'%'caracteres en el interior (a diferencia de los caracteres de escape:"a\bc"es una cadena con 3 caracteres no nulos;"a%%b"es una cadena con 4 caracteres no nulos).fuente
usar un doble %%
fuente
Me gusta esto:
fuente
La barra invertida en C se usa para escapar de caracteres en cadenas. Las cadenas no reconocerían% como un carácter especial y, por lo tanto, no sería necesario escapar. Printf es otro asunto: use %% para imprimir un%.
fuente
Puedes usar %%:
El resultado es:
fuente
está utilizando un especificador de formato incorrecto que debería usar
%%para imprimir%. Tu código debe ser:Más todos los especificadores de formato utilizados en C .
fuente
Sí, use printf ("hola %%"); Y ya está hecho.
fuente
Simplemente puede usar
%dos veces, eso es"%%"Ejemplo:
fuente
El doble '%' también funciona en ".Format (...). Ejemplo (con iDrawApertureMask == 87, fCornerRadMask == 0.05):
csCurrentLine.Format("\%ADD%2d%C,%6.4f*\%",iDrawApertureMask,fCornerRadMask) ;proporciona el valor deseado y esperado de (contenido de cadena en) csCurrentLine;"% ADD87C, 0.0500 *% "fuente