Tema 5

Anuncio
Tema 5
Entrada y Salida
Contenidos
1. Conceptos Previos de Entrada y Salida de Datos.
2. Funciones de Salida de Datos.
putchar
puts
printf
3. Funciones de Entrada de Datos.
getchar
gets
scanf
4. Ficheros en Modo Texto.
fopen /
fputc /
fputs /
fprintf
fclose / feof
fgetc
fgets
/ fscanf
2
1. Conceptos Previos de E/S
Todo programa de ordenador necesita interactuar con
el exterior para obtener los datos que ha de procesar y
presentar los resultados obtenidos.
La entrada y la salida de datos tiene lugar gracias a los
dispositivos correspondientes.
Estos dispositivos de E/S son gestionados por el
Sistema Operativo.
Para que un programa pueda acceder a los dispositivos
de E/S, el Sistema Operativo proporciona una serie de
funciones.
3
1. Conceptos Previos de E/S (II)
Funciones de E/S: transportan datos.
Funciones de Entrada → Introducen información en el ordenador.
Funciones de Salida → Extraen información desde el ordenador.
No forman parte de la definición del lenguaje C.
El lenguaje C va acompañado de una librería (biblioteca)
estándar disponible en todos los compiladores, que se encarga
de traducir las peticiones de entrada/salida en las
correspondientes llamadas a funciones del S.O. Su cabecera se
encuentra en stdio.h
Utilizando esta librería, el programador de C puede realizar
operaciones de E/S de manera independiente del S.O.,
permitiendo así que los programas sean portables.
4
2. Funciones de Salida de Datos
putchar
putchar(c);
Muestra el carácter c por pantalla en la posición
actual del cursor.
c es un dato normalmente de tipo int o char,
cuyo valor se interpreta como el código ASCII del
carácter que se quiere mostrar.
En pantalla se muestra el símbolo correspondiente.
Ejemplos:
putchar('a'); /* El carácter 'a' */
putchar(97); /* También el carácter 'a' */
putchar('\n'); /* Salto de línea */
5
2. Funciones de Salida de Datos
puts
puts(cadena);
Muestra por pantalla una cadena de caracteres a
partir de la posición actual del cursor.
cadena debe ser una cadena de caracteres.
Tras mostrar la cadena salta a la línea siguiente
automáticamente.
Ejemplos:
char cadena[]="Esto es una cadena";
puts(cadena);
puts("Esto es un ejemplo de puts");
6
2. Funciones de Salida de Datos
printf
printf(control, argumentos);
Muestra por pantalla datos de diferentes tipos según
se especifique.
control es una cadena de control que tiene dos
clases de elementos:
Caracteres normales que se imprimirán por pantalla directamente.
Caracteres especiales de formato que definen el modo en que se
visualizarán los argumentos. Siempre empiezan con el carácter %.
argumentos:
Una lista de cero o más elementos separados por comas.
Para cada argumento deberá haber una secuencia especificando el formato
deseado en control.
7
2. Funciones de Salida de Datos
printf (II)
%-+0n.mX
(Lo mínimo a poner sería %X . Lo demás es opcional)
- : Alinear a la izquierda
+ : Incluir siempre el signo (+ ó -)
0 : Alinear rellenando con ceros en lugar de espacios
n : Valor entero que indica el mínimo número de caracteres a
mostrar
.m : m es un valor entero que indica el número de dígitos
decimales a mostrar
X : Letra(s) que indica(n) el tipo de dato que se quiere mostrar
8
2. Funciones de Salida de Datos
printf (III)
Control
Tipo de dato
%c
Carácter
%s
Cadena de caracteres
%d
Número entero
%u
Entero sin signo
%ld
Entero largo (long)
%lu
Entero largo sin signo
%f
Número real en notación de
punto fijo
%e
Número real en notación
científica
%g
Real en notación de punto fijo
o científica, según convenga
9
2. Funciones de Salida de Datos
printf (IV)
printf
Salida
printf("%6d", 34);
printf("%06d", 34);
printf("%5.2f", 3.4);
printf("%5.2f", 3.456);
printf("%-10s", "hola");
printf("%-5.2f", 3.452);
printf("%d", 336);
printf("%2d", 336);
printf("%10d", 336);
printf("%-10d", 336);
printf("%f", 1234.56);
printf("%e", 1234.56);
printf("%4.2f", 1234.56);
printf("%3.1f", 1234.56);
printf("%10.3f", 1234.56);
printf("%.3e", 1234.56);
10
3. Funciones de Entrada de Datos
getchar
c = getchar();
Lee un carácter desde el teclado y devuelve su
código ASCII, que puede almacenarse en una
variable.
Ejemplo:
char c;
c = getchar();
11
3. Funciones de Entrada de Datos
gets
gets(cadena);
Lee una cadena de caracteres introducida desde el
teclado por el usuario y la almacena en la variable
cadena.
Se almacenan caracteres hasta que se encuentra un
salto de línea ('\n') (por ejemplo porque se ha
pulsado la tecla intro.), que NO se almacena.
Se utiliza mucho para leer cadenas con espacios.
Ejemplo:
char cadena[20];
gets(cadena);
12
3. Funciones de Entrada de Datos
scanf
scanf(control, variables);
Lee datos por teclado del tipo indicado.
Similar a printf, pero en sentido inverso.
En control solamente deben aparecer caracteres de control.
Las variables han de ir precedidas por el símbolo &
(excepto las cadenas de caracteres), que es la forma
de indicar en C que van a ser modificadas.
El formato de la cadena de control es: %X
No se indican datos de precisión, alineación ...
Toma como delimitador los espacios en blanco y
saltos de línea.
No se puede usar para leer cadenas que contengan espacios.
13
3. Funciones de Entrada de Datos
scanf (II)
Control
\n%c
Tipo de dato
char
%s
Cadena de caracteres
%d
int
%u
unsigned int
%hd
short int
%hu
unsigned short int
%ld
long int
%lu
unsigned long int
%f
float
%lf
double
14
4. Ficheros en Modo Texto
fopen / fclose / feof
F = fopen(nombre, modo);
Abre el fichero nombre en el modo especificado: lectura ("r"), escritura
("w") o añadir ("a").
Para abrir un fichero en modo lectura es imprescindible que exista. Si no
existe o se produce algún error, se devuelve NULL.
Cuando se abre un fichero en modo escritura ("w") se borra el contenido en
caso de que ya existiese → ¡Cuidado!
Ejemplo:
FILE *F; /* FILE* es el tipo para ficheros */
F = fopen("notas.txt", "r");
fclose(F);
Cierra el fichero que se abrió en F.
fin_de_fichero = feof(F);
Devuelve verdadero (un valor distinto de cero) si se ha llegado al final del
fichero abierto en F y falso (cero) en caso contrario.
Para que devuelva cierto, una operación de E/S anterior debe haber alcanzado el final del fichero.
15
4. Ficheros en Modo Texto
fputc / fgetc
fputc(c, F);
Escribe en el fichero abierto en F el carácter c.
Salvo por trabajar con ficheros es idéntico a putchar.
( putchar(c) es equivalente a fputc(c, stdout) )
c = fgetc(F);
Lee un carácter del fichero abierto en F.
En caso de que se produzca un error o se haya llegado al
final del fichero, se devuelve EOF (End Of File).
¡Ojo! EOF es una constante de tipo entero que no cabe bien en una variable
de tipo char. Si se va a usar c para luego comparar con EOF, usar tipo int.
Salvo por trabajar con ficheros es idéntico a getchar.
( getchar() es equivalente a fgetc(stdin) )
16
4. Ficheros en Modo Texto
fputs / fgets
fputs(cadena, F);
Escribe en el fichero abierto en F la cadena cadena.
Es como puts, pero escribiendo a un fichero y sin añadir
el salto de línea que puts pone al final.
fgets(cadena, tam, F);
Lee del fichero abierto en F una cadena de caracteres que
guarda en la variable cadena. Se van leyendo caracteres
hasta que se da una de estas circunstancias:
Se lee un salto de línea (el carácter '\n'), que se almacena en cadena.
Se alcanza el fin de fichero (el EOF). (En este caso no se guarda el '\n')
Si no se ha leído ningún carácter, fgets devuelve NULL.
Se han leído tam-1 caracteres, de forma que tras añadir el carácter fin de
cadena nunca se supera tam. (En este caso no se guarda el '\n')
Es como gets; pero lee de fichero, indica el tamaño de la
variable y sí que guarda el '\n' en cadena.
17
4. Ficheros en Modo Texto
fprintf / fscanf
fprintf(F, control, argumentos);
Escribe en el fichero abierto en F los datos especificados.
Salvo por trabajar con ficheros es idéntico a printf.
( printf(c,a) es equivalente a fprintf(stdout,c,a) )
fscanf(F, control, variables);
Lee del fichero abierto en F los datos especificados.
Devuelve el número de variables leídas correctamente o EOF si se ha
llegado al final de fichero sin leer ninguna de ellas.
Salvo por trabajar con ficheros es idéntico a scanf.
( scanf(c,v) es equivalente a fscanf(stdin,c,v) )
18
Descargar