Entrada/Salida estándar en C
Atrás
Las funciones estándar de entrada/salida se definen el el fichero de cabeceras
stdio.h
.
Las funciones principales son:
- printf: escritura con formato
(
print-f
ormat).
Prototipo:
int printf(const char *fmt, ...);
- scanf: lectura con formato
(
scan-f
ormat).
Prototipo:
int scanf(const char *fmt,
...);
Ambas funciones (y todas las de sus familias) utilizan un especificador de
formato fmt
con amplias posibilidades.
La cadena que especifica el formato fmt
puede hacer
referencia a una o más
variables pasadas como argumentos que habrá que formatear
(con printf
)
o que representarán las direcciones de las variables
donde se depositará los valores leídas con formato
(con scanf
),
por ejemplo:
printf("Valores: %d
%d\n", num1, num2);
Un especificador de formato fmt
tiene la forma general:
"%-+ 0w.pmc"
que se describe detalladamente
en la Tabla 1.
Por ejemplo, el especificador "%8.2lf"
se corresponde con
el patrón general "%w.pmc"
.
Si se desea especificar el caracter % habrá que especificarlo por duplicado,
por ejemplo:
printf("Interés: %.2lf %% anual\n", tasa);
|
%-+ 0w.pmc
|
Ejemplo |
%
|
Comienzo de especificador de formato
|
printf ("%d", n); |
-
|
Alineación a la izquierda (especialmente útil para cadenas)
|
printf ("%-20s", str); |
+
|
Mostrar signo
|
printf ("%+d", n); |
|
(espacio) mostrar espacio si no hay signo
|
printf ("% d", n); |
0
|
(cero) rellenar por delante de ceros según anchura
|
printf ("%02d:%02d", hh, mm); |
w
|
Anchura mínima del campo (con * se toma como parámetro)
|
printf ("%8d", val); |
.
|
A continuación especificador de precisión
|
printf ("%.0f", q); |
p
|
Especificador de precisión
| printf ("%.2f", total); |
m
|
Tamaño del dato a convertir
|
printf ("%.2lf", dbl); |
c
|
Tipo de conversión
|
printf ("%x", flags); |
|
Tabla 1. Especificador de formato
|
|
La Tabla 2 detalla los diferentes modos de conversión según el tipo de
las variables a las que hacen referencia.
|
Especificador |
Descripción |
Ejemplo |
Enteros |
d |
Entero decimal opcionalmente con signo |
printf ("%d", n); |
i |
Entero decimal, octal, o hexadecimal opcionalmente con signo |
scanf ("%i", &i); |
o |
Entero octal sin signo |
printf ("%o", o); |
u |
Entero decimal sin signo |
printf ("%u", sz); |
x X |
Entero hexadecimal sin signo |
printf ("%x", n); |
h l [Prefijo] |
Indica short o long |
scanf ("%hd", &s); |
Coma flotante |
e E f g G |
Valor en coma flotante |
scanf ("%f", &nf); |
l L [Prefijo] |
Indica double o long double |
scanf ("%lf", &dbl); |
Caracteres y cadenas |
c |
Carácter |
scanf ("%c", &car); |
s |
Cadena (para scanf finaliza con un
separador, incluyendo espacios) |
printf ("Nombre: %s\n", nom); |
[conjunto] |
Especificador de conjunto de caracteres (para
scanf ) |
scanf ("%2[0-9A-Fa-f]", &buf); |
|
Tabla 2. Especificadores de conversión
|
|
Atrás