El comando printf Stranger, este es un tema muy grande que necesita experiencia - por favor, rellene la información que falta, amplíe las descripciones y corrija los detalles si puede Atención: Se trata de Bash-builtin printf comando - sin embargo, la descripción debe ser Casi idéntico para un comando externo que sigue a POSIX. GNU Awk espera una coma después de la cadena de formato y entre cada uno de los argumentos de un comando printf. Para ejemplos, vea: snippet de código. A diferencia de otras documentaciones, no quiero redirigirte a la página de manual de la familia de funciones de printf () C. Sin embargo, si you039re más experimentado, que debe ser la descripción más detallada de las cadenas de formato y modificadores. Debido a implementaciones históricas conflictivas del comando echo, POSIX recomienda que printf sea preferible a echo. General El comando printf proporciona un método para imprimir texto preformateado similar a la interfaz del sistema printf () (función C). It039s significado como sucesor de eco y tiene mucho más características y posibilidades. Además de otras razones, POSIX tiene un argumento muy bueno para recomendarlo: Ambos históricos principales sabores del comando echo son mutuos exclusivos, chocan. Había que inventar un nuevo comando para resolver el problema. Sintaxis El formato de texto se da en ltFORMATgt. Mientras que todos los argumentos a los que la cadena de formato puede apuntar se dan después de eso, aquí, indicados por ltARGUMENTSgt. Así, un típico printf - call se parece a: donde quotSome: snName: snquot es la especificación de formato, y las dos variables se pasan como argumentos, el s en el formatstring apunta a (para cada especificador de formato que da printf espera un argumento) . Opciones Si se da, la salida se asigna a la variable VAR en lugar de imprimirse a stdout (comparable a sprintf () de alguna manera). La opción - v no puede asignar directamente a índices de matriz en las versiones de Bash anteriores a Bash 4.1. En las versiones más recientes que 4.1, se debe tener cuidado al realizar expansiones en el primer argumento no de opción de printf, ya que esto abre la posibilidad de una vulnerabilidad de inyección de código fácil. Donde el eco puede por supuesto ser reemplazado con cualquier comando arbitrario. Si es necesario, especifique una cadena de formato codificada o utilice - para indicar el final de las opciones. El mismo problema se aplica a leer. Y una similar a mapfile. Aunque realizar expansiones en sus argumentos es menos común. Argumentos Por supuesto, en la shell-lo que significa que los argumentos son sólo cadenas, sin embargo, las notaciones C comunes más algunas adiciones para las constantes de número se reconocen para dar un número de argumento a printf. printf y scanf número de códigos de formato con hasta seis dígitos de Precisión, notación científica Nota de pie de página: En printf (), se esperan las promociones de tipo de expresión - en una expresión, char y short se convierten en int y float se convierte en doble. Así c corresponde en realidad a un parámetro de tipo int y f y g corresponden en realidad a parámetros de tipo doble. Así, en printf () no hay diferencia entre f y lf, o entre gy lg. Sin embargo, en scanf () lo que se pasa es un puntero a la variable por lo que no se producen promociones de tipo o se esperan. Así, f y lf son bastante diferentes en scanf, pero lo mismo en printf. Personalmente, solía usar lg rutinariamente para dobles en printf y scanf, pero esto está fuera de favor en estos días y de hecho gcc le dará un mensaje de advertencia para el uso de lg en printf. El procedimiento habitual en estos días es utilizar g para doble en printf y lg para doble en scanf. No importa cuál usted utiliza para el printf porque la función de la biblioteca del printf los trata también, pero su crucial conseguirlo correcto para el scanf. Printf modificadores de formato Los modificadores aparecen entre la y la letra clave. Un número es un ancho de campo. Y un número es una precisión. Ejemplo: printf (6.3f, 2.8) produce 2.800 (con un espacio antes del 2). Note que ese 6 incluye los 3 decimales y el 1. - 6 caracteres en total. Así 6-3-1 2 caracteres a la izquierda del punto decimal. 0 (el dígito cero) significa almohadilla con ceros al ancho del campo (usualmente utilizado sólo con números enteros) l (la letra) significa largo, p. Ld para formatear un int largo en decimal Ejemplo de 0: 2. 3 (un espacio entre. y 3) En 02d, el 0 no forma parte del ancho del campo. Es un carácter modificador. Y cuando tienes un ancho de campo, debes escribirlo de tal manera que no empiece con un cero (y luego puedes añadir un cero como un carácter de modificador si lo deseas).printf Imprime los datos formateados en stdout Escribe la cadena C señalada Por formato a la salida estándar (stdout). Si formato incluye especificadores de formato (subsecuencias que comienzan con), los argumentos adicionales que siguen al formato se formatean e insertan en la cadena resultante que sustituye a sus respectivos especificadores. Parámetros format C string que contiene el texto a ser escrito en stdout. Opcionalmente puede contener especificadores de formato incrustado que se reemplazan por los valores especificados en argumentos adicionales posteriores y se formatean según lo solicitado. Donde el carácter del especificador en el extremo es el componente más significativo, puesto que define el tipo y la interpretación de su argumento correspondiente: Significado decimal entero Unsigned decimal entero Unsigned hexadecimal entero Unsigned hexadecimal entero (mayúsculas) Decimal punto flotante, minúsculas Decimal flotante, Mayúsculas Notación científica (mantisa / exponente), minúsculas Notación científica (mantisa / exponente), mayúsculas Utilice la representación más corta: e o f Utilice la representación más corta: E o F Hexadecimal punto flotante, minúscula Hexadecimal punto flotante, mayúscula . El argumento correspondiente debe ser un puntero a un int firmado. El número de caracteres escritos hasta ahora se almacena en la ubicación puntiaguda. A seguido de otro carácter escribirá un solo en la secuencia. El especificador de formato también puede contener sub-especificadores: flags. Anchura. precisión y modificadores (en ese orden), que son opcionales y siguen estas especificaciones: Justificación a la izquierda dentro del ancho de campo dado La justificación a la derecha es la predeterminada (véase el sub-especificador de ancho). Fuerza para preceder el resultado con un signo más o menos (o -) incluso para los números positivos. Por defecto, sólo los números negativos están precedidos de un signo. Si no se va a escribir ningún signo, se inserta un espacio en blanco antes del valor. Se utiliza con o. X o X el valor se precede con 0. 0x o 0X respectivamente para valores diferentes de cero. Se utiliza con un. A . E. E. F. F G o G obliga a la salida escrita a contener un punto decimal aunque no se sigan más dígitos. De forma predeterminada, si no aparecen dígitos, no se escribe un punto decimal. Left-pads el número con ceros (0) en lugar de espacios cuando se especifica el relleno (vea el sub-especificador de ancho). Para especificadores de números enteros (d, i, u, x, X): precision especifica el número mínimo de dígitos a escribir. Si el valor a escribir es menor que este número, el resultado se rellena con ceros a la izquierda. El valor no se trunca incluso si el resultado es más largo. Una precisión de 0 significa que no se escribe ningún carácter para el valor 0. Para . A . E. E. F y F: es el número de dígitos a imprimir después del punto decimal (por defecto, esto es 6). Para especificadores G y G: Es el número máximo de dígitos significativos que se deben imprimir. Para s. Este es el número máximo de caracteres a imprimir. De forma predeterminada, todos los caracteres se imprimen hasta que se encuentra el carácter nulo final. Si el período se especifica sin un valor explícito para la precisión. 0 se asume. La precisión no se especifica en la cadena de formato, sino como un argumento adicional de valor entero que precede al argumento que debe formatearse. El sub-especificador de longitud modifica la longitud del tipo de datos. Este es un gráfico que muestra los tipos utilizados para interpretar los argumentos correspondientes con y sin especificador de longitud (si se utiliza un tipo diferente, se realiza la promoción o conversión apropiada de tipo, si se permite): Nota sobre el especificador c: toma un int ( O wintt) como argumento, pero realiza la conversión adecuada a un valor char (o un wchart) antes de formatearlo para la salida. Nota: Las filas amarillas indican los especificadores y sub-especificadores introducidos por C99. Consulte ltcinttypesgt para los especificadores de tipos extendidos. . (Argumentos adicionales) Dependiendo de la cadena de formato, la función puede esperar una secuencia de argumentos adicionales, cada uno conteniendo un valor que se utilizará para reemplazar un especificador de formato en la cadena de formato (o un puntero a una ubicación de almacenamiento, para n). Debe haber al menos tantos de estos argumentos como el número de valores especificados en los especificadores de formato. Los argumentos adicionales son ignorados por la función. Valor devuelto En caso de éxito, se devuelve el número total de caracteres escritos. Si se produce un error de escritura, se establece el indicador de error (ferror) y se devuelve un número negativo. Si se produce un error de codificación de caracteres multibyte al escribir caracteres anchos, errno se establece en EILSEQ y se devuelve un número negativo. Compatibilidad de ejemplo Las implementaciones de bibliotecas particulares pueden admitir especificadores y sub-especificadores adicionales. Los enumerados aquí están soportados por los últimos estándares de C y C (ambos publicados en 2011), pero los de color amarillo se introdujeron en C99 (sólo se requiere para las implementaciones de C desde C11) y pueden no ser compatibles con bibliotecas que cumplen con estándares antiguos. Ver también pone Escribir cadena a stdout (función) scanf Leer datos formateados desde stdin (función) fprintf Escribir datos formateados a flujo (función) fwrite Escribir bloque de datos a flujo (función) funciones: objects: types: macro constantes:
No comments:
Post a Comment