Función de la biblioteca C -printf()
Biblioteca estándar de C - <stdio.h>
Descripción
Función de la biblioteca Cint printf(const char *format, ...)Envía la salida formateada a la salida estándar stdout.
El formato de llamada de la función printf() es:
printf("<格式化字符串>", <参量表>);
Declaración
A continuación se muestra la declaración de la función printf().
int printf(const char *format, ...)
Parámetros
format-- Esta es la cadena que contiene el texto a escribir en la salida estándar stdout. Puede contener etiquetas de formato incrustadas, que pueden ser reemplazadas por los valores especificados en los parámetros adicionales posteriores y formateadas según sea necesario. Los atributos de las etiquetas de formato son: %[flags][width][.precision][length]specifier, y se explican a continuación:
| Carácter de formato | Significado |
|---|---|
| a, A |
Muestra un número de punto flotante en forma hexadecimal (nuevo en C99). Ejemploprintf("pi=%a\n", 3.14);Salidapi=0x1.91eb86p+1。 |
| d | Muestra un entero con signo en forma decimal (no se muestra el signo para positivos) |
| o | Muestra un entero sin signo en forma octal (no se emite el prefijo 0) |
| x,X | Muestra un entero sin signo en forma hexadecimal (no se emite el prefijo 0x) |
| u | Muestra un entero sin signo en forma decimal |
| f | Muestra números reales de precisión simple o doble en forma decimal |
| e,E | Muestra números reales de precisión simple o doble en forma exponencial |
| g,G | Muestra números reales de precisión simple o doble con la anchura de salida más corta entre %f o %e |
| c | Muestra un solo carácter |
| s | Muestra una cadena |
| p | Muestra la dirección de un puntero |
| lu | Entero sin signo de 32 bits |
| llu | Entero sin signo de 64 bits |
| flags (indicadores) | Descripción |
|---|---|
| - | Alinea a la izquierda dentro de la anchura de campo dada; por defecto es alineación a la derecha (consulte el subespecificador width). |
| + | Fuerza la visualización de un signo más o menos (+ o -) antes del resultado; es decir, los números positivos se muestran con un signo +. Por defecto, solo los números negativos se muestran con un signo -. |
| Espacio | Si no se escribe ningún signo, se inserta un espacio antes del valor. |
| # | Cuando se usa con los especificadores o, x o X, se muestra 0, 0x o 0X respectivamente antes de valores distintos de cero. Cuando se usa con e, E y f, fuerza la salida para incluir un punto decimal, incluso si no hay dígitos después. Por defecto, si no hay dígitos después, no se muestra el punto decimal. Cuando se usa con g o G, el resultado es el mismo que con e o E, pero los ceros finales no se eliminan. |
| 0 | Coloca ceros (0) a la izquierda del número al rellenar (padding), en lugar de espacios (consulte el subespecificador width). |
| width (anchura) | Descripción |
|---|---|
| (number) | Número mínimo de caracteres a mostrar. Si el valor de salida es más corto que este número, el resultado se rellena con espacios. Si el valor de salida es más largo que este número, el resultado no se trunca. |
| * | La anchura no se especifica en la cadena format, sino que se coloca como un parámetro de valor entero adicional antes del parámetro que se va a formatear. |
| .precision (precisión) | Descripción |
|---|---|
| .number | Para los especificadores de entero (d, i, o, u, x, X): precision especifica el número mínimo de dígitos que se deben escribir. Si el valor escrito es más corto que este número, el resultado se rellena con ceros a la izquierda. Si el valor escrito es más largo que este número, el resultado no se trunca. Una precisión de 0 significa que no se escribe ningún carácter. Para los especificadores e, E y f: el número de dígitos decimales que se deben mostrar después del punto decimal. Para los especificadores g y G: el número máximo de dígitos significativos a mostrar. Para s: el número máximo de caracteres a mostrar. Por defecto, se muestran todos los caracteres hasta encontrar el carácter nulo final. Para el tipo c: no tiene ningún efecto. Cuando no se especifica precisión, el valor predeterminado es 1. Si se especifica sin un valor explícito, se asume 0. |
| .* | La precisión no se especifica en la cadena format, sino que se coloca como un parámetro de valor entero adicional antes del parámetro que se va a formatear. |
| length (longitud) | Descripción |
|---|---|
| h | El parámetro se interpreta como un entero corto o un entero corto sin signo (solo para especificadores de entero: i, d, o, u, x y X). |
| l | El parámetro se interpreta como un entero largo o un entero largo sin signo, y se aplica a los especificadores de entero (i, d, o, u, x y X) y a los especificadores c (que representa un carácter ancho) y s (que representa una cadena de caracteres anchos). |
| L | El parámetro se interpreta como un double largo (solo para especificadores de punto flotante: e, E, f, g y G). |
Parámetros adicionales-- Dependiendo de la cadena format, la función puede requerir una serie de parámetros adicionales, cada uno contiene un valor que se insertará, reemplazando cada etiqueta % especificada en el parámetro format. El número de parámetros debe ser igual al número de etiquetas %.
Valor de retorno
Si tiene éxito, devuelve el número total de caracteres escritos; de lo contrario, devuelve un número negativo.
Ejemplo
El siguiente ejemplo demuestra el uso de la función printf().
Ejemplo
Compilemos y ejecutemos el programa anterior, esto producirá el siguiente resultado:
ASCII 值 = 75, 字符 = K ASCII 值 = 76, 字符 = L ASCII 值 = 77, 字符 = M ASCII 值 = 78, 字符 = N ASCII 值 = 79, 字符 = O ASCII 值 = 80, 字符 = P ASCII 值 = 81, 字符 = Q ASCII 值 = 82, 字符 = R ASCII 值 = 83, 字符 = S ASCII 值 = 84, 字符 = T ASCII 值 = 85, 字符 = U ASCII 值 = 86, 字符 = V ASCII 值 = 87, 字符 = W ASCII 值 = 88, 字符 = X ASCII 值 = 89, 字符 = Y ASCII 值 = 90, 字符 = Z ASCII 值 = 91, 字符 = [ ASCII 值 = 92, 字符 = \ ASCII 值 = 93, 字符 = ] ASCII 值 = 94, 字符 = ^ ASCII 值 = 95, 字符 = _ ASCII 值 = 96, 字符 = ` ASCII 值 = 97, 字符 = a ASCII 值 = 98, 字符 = b ASCII 值 = 99, 字符 = c ASCII 值 = 100, 字符 = d
El siguiente ejemplo muestra varios datos formateados:
Ejemplo
El resultado de la ejecución es:
字符为 A 字符串为 www.example.com 浮点数为 10.234000 整数为 150 双精度值为 20.123456 八进制值为 226 十六进制值为 96
Especificador
- %dEntero con signo en decimal
- %uEntero sin signo en decimal
- %fNúmero de punto flotante
- %sCadena
- %cCarácter individual
- %pValor de un puntero
- %eNúmero de punto flotante en forma exponencial
- %x, %XEntero sin signo representado en hexadecimal
- %oEntero sin signo representado en octal
- %gMuestra el valor de salida según el tipo %e o %f, el que tenga una longitud de salida menor
- %pEspecificador de dirección de salida
- %luEntero sin signo de 32 bits
- %lluEntero sin signo de 64 bits
- %%Muestra el carácter de porcentaje en sí.
Además de los especificadores de formato, la función printf() también admite algunas banderas y opciones para controlar la precisión, la anchura, los caracteres de relleno y la alineación de la salida, entre otros. Por ejemplo:
- %-10s: cadena alineada a la izquierda que ocupa una anchura de 10;
- %5.2f: número de punto flotante alineado a la derecha que ocupa una anchura de 5, con dos decimales;
- %#x: muestra un número hexadecimal con el prefijo 0x.
La función printf() también admite listas de parámetros variables, que se pueden indicar con puntos suspensivos...para especificar múltiples valores a mostrar. Dentro de la función, se pueden usar las macros va_start() y va_end() para acceder a los valores de la lista de parámetros variables. Por ejemplo:
Ejemplo
#include <stdarg.h>
void print_values(int count, ...)
{
va_list args;
va_start(args, count);
for (int i = 0; i < count; i++) {
printf("%d ", va_arg(args, int));
}
va_end(args);
}
int main()
{
print_values(3, 1, 2, 3); // muestra "1 2 3"
return 0;
}
El resultado de la ejecución es:
1 2 3Otras extensiones