printf

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda


Un ejemplo de la función printf.

Numerosos lenguajes de programación implementan una función printf (print formatted), para mostrar una cadena con formato. Esta, originaria del lenguaje de programación C, tiene un prototipo similar al siguiente:

 int printf(const char* formato,...)

La cadena constante formato provee una descripción de la salida, con placeholders marcados por caracteres de escape "%", para especificar la localización relativa y el tipo de salida que la función debe producir.

Por ejemplo en C:

 printf("Color %s, numero1 %d, numero2 %05d, hex %x, real %5.2f.\n", "rojo", 12345, 89, 255, 3.14);

imprimirá la siguiente línea (incluyendo el caracter de nueva línea \n):

 Color rojo, numero1 12345, numero2 00089, hex ff, real 3.14.

La función printf retorna el número de caracteres impresos, o un valor negativo si ocurre un error.

Ejemplo[editar]

El clásico ejemplo de Hola Mundo! para mostrar esta cadena de texto.

#include <stdio.h>
 
int main(void)
{
  printf("¡Hola, mundo!\n");
  return 0;
}

Formateadores[editar]

printf permite dar formato especifico a la salida, aqui algunos ejemplos:

Formateador Salida
%i entero en base 10
%o entero en base 8
%x entero en base 16
%u entero sin signo
%x entero en base 16, letras en minúscula
%X entero en base 16, letras en mayúscula
%+i imprime el carácter de signo
%i fuerza un espacio inicial adelante del signo
%07i justificado a la derecha, 7 dígitos de largo, sin relleno
%.7i largo mínimo de 7 digitos, justificado a la derecha, rellena con ceros
%8.2f tamaño total de 8 digitos, con dos decimales
%.*f”',x,d) tamaño predeterminado,x numeros decimales
%*.*f”,x,y,d) tamaño igual a x, y numeros decimales
%s cadena terminada en null
%5s primeros cinco caracteres o delimitador
%.5s primeros cinco caracteres, sin tener en cuenta el delimitador
%20.5s primeros cinco caracteres, justificados a la derecha, con 20 caracteres de largo
%-20.5s primeros cinco caracteres, justificados a la izquierda, con 20 caracteres de largo

Funciones derivadas[editar]

sprintf[editar]

Prototipo:.

 int sprintf(char *str, const char *format,...)

Devolviendo: un entero, que índica el número de caracteres leidos.

Ejemplo de uso ( C ):

#include <stdio.h>
   
int main()
{
   char cadena[12];
   char buffer[120];
   char* buffer1 = "Hemos escrito un ESLOGAN con sprintf - ";
   int i,j, numerito=78989, tam_cad, tam_buffer;
   
   for(i=0; buffer1[i]!='\0'; i++) buffer[i]=buffer1[i]; /* Copiamos un STRING a Cadena y medimos su tamaño */
   tam_buffer=i;
   tam_cad=sprintf(cadena ,"%d", numerito); /* Pasamos a cadena el número ( de entero a char* ) */
   for(i=0,j=tam_buffer; i<tam_cad; i++, j++) buffer[j]=cadena[i]; // Le pegamos la cadena ( contiene el numeritoo )
   buffer[j]='\0';
   
   printf("\n\n %s \n\n", buffer);
   
   return(0);
}

Mostraría: Hemos escrito un ESLOGAN con sprintf - 78989

fprintf[editar]

fprintf file print format permite que la salida de printf pueda escribirse en cualquier archivo. Los programadores suelen utilizarlo para imprimir errores, pero puede funcionar con cualquier archivo abierto con la función fopen. Su prototipo, dentro del archivo de cabecera stdio.h, sería:

 int fprintf(FILE *stream, const char *format,...)
donde:
  • *stream: es el flujo del archivo abierto, es decir la variable·puntero declarada a fopen
  • *format. sería lo que se quiere guardar.

snprintf[editar]

snprintf string number print format produce una salida con formato como printf, pero en vez de enviarlo al stdout lo escribe a una cadena de caracteres. A diferencia de sprintf esta necesita el número de bytes que queremos escribir, pudiendo evitar así más fácilmente un problema de desbordamiento de buffer. Su prototipo, dentro del archivo de cabecera stdio.h, sería:

 int snprintf(char *str, size_t size, const char *format,...)


donde:
  • char *str: Cadena de destino.
  • size_t size: Número de bytes a escribir. Se suele poner el tamaño de la cadena destino.
  • const char *format,... : Formato habitual de printf.

Veamos un ejemplo:

 int edad=5;
 char nombre[10]="Juan";
 char cadena[10];
 
 snprintf(cadena,sizeof(cadena),"Me llamo %s y tengo %d años",nombre,edad);

En este caso snprintf escribiría en la variable "cadena" los 10 primeros bytes de "Me llamo Juan y tengo 5 años"

Véase también[editar]

Enlaces externos[editar]