¿Cómo escapas del signo% cuando lo usas printf
en C?
printf("hello\%"); /* not like this */
c
printf
format-string
Chris_45
fuente
fuente
%
es específicoprintf
, ¿correcto?\045
es un escape en tiempo de compilación que es parte del lenguaje y se convertirá en%
cuando se compila.printf
es 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,printf
es 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,
puts
agrega a\n
a la salida yfputs
no.fuente
puts
. Nunca penséputs
en 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