Función de la biblioteca C -printf()

C 标准库 - <stdio.h>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 -.
EspacioSi 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.
0Coloca 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
.numberPara 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
hEl 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).
lEl 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).
LEl 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

#include <stdio.h> int main () { int ch; for( ch = 75 ; ch <= 100; ch++ ) { printf("Valor ASCII = %d, carácter = %c\n", ch , ch ); } return(0); }

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

#include <stdio.h> int main() { char ch = 'A'; char str[20] = "www.example.com"; float flt = 10.234; int no = 150; double dbl = 20.123456; printf("El carácter es %c\n", ch); printf("La cadena es %s\n" , str); printf("El número de punto flotante es %f\n", flt); printf("El entero es %d\n" , no); printf("El valor de doble precisión es %lf\n", dbl); printf("El valor octal es %o\n", no); printf("El valor hexadecimal es %x\n", no); return 0; }

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 <stdio.h>
#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 3

C 标准库 - <stdio.h>Biblioteca estándar de C - <stdio.h>

Otras extensiones