INF Tema3 EntradaYSalidaDeDatos
INF Tema3 EntradaYSalidaDeDatos
INF Tema3 EntradaYSalidaDeDatos
2
Introducción: E/S
Entrada: el usuario Salida: el programa
introduce datos al muestra datos por
programa (escribe por pantalla.
teclado)
Entrada Salida
Lectura Escritura
3
Salida de datos por pantalla
printf("cadena de control", lista de parámetros);
opcional
4
Caracteres de control
Carácter de control Dato
%d Entero
%u Entero sin signo
Los más usados
6
Ejemplo
int main() La suma
>> ¿Qué es 9
mostrará
{ en pantalla?
int a=4, b=5, c; 4+5=9
c= a + b;
Hola, ¿Qué tal?
printf("La suma es %d\n",c);
printf("%d + %d = %d\n",a,b,c);
printf("Hola");
printf(", ¿Qué tal?\n");
return 0;
}
7
Ejemplo
int ganancia=20;
printf("Rebaja del %d%%.\n",ganancia);
Rebaja del 20%.
char c=65;
printf("Carácter %c (ASCII %d). Carácter %c (ASCII %d)\n", 65, 65,
'A', 'A');
Carácter A (ASCII 65). Carácter A (ASCII 65)
8
Ejemplo
9
Entrada de datos de teclado
scanf("cadena de control", lista de variables);
10
Ejemplo
int main()
{
int dia, mes, anyo;
printf("Fecha de nacimiento?:");
scanf("%d%d%d",&dia,&mes,&anyo);
return 0;
}
11
Ejemplo
int main()
Antes de un scanf suele ser conveniente
{ poner un printf, para que el usuario sepa
int a, b; lo que debe introducir.
12
Ejemplo
int main() La cadena de control de scanf sólo debe contener comandos de control.
{ La cadena de control de printf puede tener cualquier cosa.
int a, b;
return 0;
} 13
Ejemplo
int main() Las variables de scanf van precedidas por & (excepto las cadenas de caracteres).
{ Las variables de printf no van precedidas de &.
int a, b;
printf("Introduce dos valores enteros\n");
scanf("%d%d", a, b); /* Error (no sintáctico): falta & */
return 0;
}
14
Ejemplo
int main()
En scanf sólo pueden aparecer variables.
{
int a; En printf pueden aparecer variables, constantes o expresiones.
15
Ejemplo
Escribir un programa que calcule el perímetro de
una circunferencia:
2 x x radio
int main()
{
float radio, area;
printf("Radio:");
scanf("%f", &radio);
area = PI*radio*radio;
20
Posible solución
int main()
{
float n;
printf("Introduzca el número:");
scanf("%f", &n);
Resultado = pow(a, b)
• #include <math.h>
• Calcula ab y devuelve el valor.
• El valor devuelto es real aunque a y b sean enteros.
• Ejemplo:
float res;
res = pow(3,2); ➔ 32 ➔ 9.0
printf("Resultado: %f", pow(3, 2.0)); ➔ Resultado: 9.0
22
Posible solución
#include <math.h>
#include <stdio.h>
int main()
{
float n;
printf("Introduzca el número:");
scanf("%f", &n);
printf("La mitad de %f es %f", n, n/2);
printf("El cuadrado de %f es %f", n, pow(n,2));
printf("El cubo de %f es %f", n, pow(n,3));
return 0;
}
23
Ejercicio
En un almacén se guarda una cantidad determinada de artículos, todos
iguales.
Escribir un programa que calcule el valor de los artículos del almacén.
Para ello leer la cantidad de artículos que contiene el almacén y el
precio de un artículo.
Mostrar por pantalla el valor resultante.
24
Posible solución
int main()
{
float precio;
int cantidad;
25
Ficheros
• Archivo o fichero: conjunto de datos almacenado en un dispositivo
de almacenamiento secundario: memoria fija (disco duro, DVD, CD).
• Independiente de la información que contengan (datos, programas,
textos, gráficos,...).
Hola 456
Soy un fichero 789
Contengo datos 6.55
Hola.txt datos.txt
26
Nombre de fichero
Se identifica por un nombre y una extensión:
• Nombre
• Extensión: define el tipo de archivo. Suele tener 3 o 4 caracteres.
27
Fin de fichero
Todos los ficheros terminan en un carácter especial que indica el final
del fichero: EOF (end of file). El carácter no es visible.
28
Operaciones con ficheros
1. Definir una variable de tipo fichero (FILE *) :
declaración del fichero.
2. Abrir el fichero, y comprobar que la apertura es correcta.
3. Operar con el fichero: leer del fichero o escribir al
fichero.
4. Cerrar el fichero.
29
Declaración de variables ficheros
Tipo del fichero: FILE *
FILE *mi_fichero;
FILE *f1, *f2;
FILE *a, *b, *c;
30
Abrir Ficheros
variable_fichero = fopen(nombre_fichero, modo);
31
Abrir Ficheros
Modos principales:
• r Abre el fichero para lectura. El fichero debe existir, sino se
produce un error.
• a Abre el fichero para añadir datos al final del fichero. Si el fichero
no existe, lo crea.
• w Abre el fichero para escritura. Si el fichero existe borra su
contenido. Si no existe, lo crea.
32
Abrir Ficheros
Nombre del fichero:
• Entre comillas dobles si es una cadena constante: "prueba.txt".
• Con extensión.
• Si no está en el directorio por defecto debe incluir el path:
"c:\\temp\\prueba.txt".
33
Abrir Ficheros
...
FILE *fichero, *f1, *ejemplo, *f;
34
Abrir Ficheros
Tras abrir el fichero, se abra en el modo que se abra, se debe comprobar que
no hay errores de apertura: instrucción
FILE *fic; condicional “si”.
fic=fopen("C:\\prueba.txt","r"); Más adelante se
if (fic==NULL){ detallará en
printf("Error al abrir el fichero"); profundidad.
return 1;
}
printf("Fichero abierto para lectura");
/* aquí las operaciones de lectura */
fclose(fic);
35
Cerrar Ficheros
fclose(puntero_fichero);
Ejemplo:
FILE *f;
f = fopen("fichero.txt", "r");
...
fclose(f);
36
Salida de datos a fichero (escritura) opcional
• Cadena de control: indica como se van a visualizar los datos. Formada por
literales y caracteres de control. Los caracteres de control indican como deben
visualizarse los datos en pantalla.
38
Salida de datos a fichero (escritura)
Sólo se puede escribir en un fichero si está abierto para escritura (modo "w") o para añadir datos
(modo "a").
FILE *f;
int a=4, b=5, c;
datos.txt
f=fopen("datos.txt", "w");
if (f==NULL){ La suma es 9
printf("Error al abrir el fichero"); 4+5=9
return 1;
}
c=a+b;
fprintf(f,"La suma es %d\n",c);
fprintf(f,"%d + %d = %d\n",a,b,c);
fclose(f);
39
Entrada de datos de fichero (lectura)
fscanf(fichero, "cadena de control", lista de variables);
• Para leer una variable de tipo cadena de caracteres, no se pone & (ya es un
puntero).
40
Ejemplo
Modificar este programa para que lea los datos de un fichero (entrada.txt) y
escriba a otro fichero (salida.txt).
#include <stdio.h>
int main()
{
int a, b;
printf("Introduzca dos enteros:\n");
scanf("%d%d", &a, &b);
printf("%d + %d = %d\n", a, b, a+b);
return 0;
}
41
Ejemplo
Paso 1. Declarar las variables de tipo fichero.
Paso 2. Abrir los ficheros
int main()
{
int a, b;
FILE *fe, *fs;
fe = fopen("entrada.txt", "r");
if (fe==NULL){
printf("Error al abrir el fichero de entrada");
return 1;
}
fs = fopen("salida.txt", "w");
if (fs==NULL){
printf("Error al abrir el fichero de salida");
return 1;
}
printf("Introduzca dos valores enteros:\n");
scanf("%d%d", &a, &b);
printf("%d + %d = %d\n", a, b, a+b);
return 0;
}
42
Ejemplo
Paso 3. Cambiar las operaciones de lectura y escritura por las propias de ficheros.
Paso 4. Añadir los punteros a fichero.
int main()
{
int a, b;
FILE *fe, *fs;
fe = fopen("entrada.txt", "r");
if (fe==NULL){
printf("Error al abrir el fichero de entrada");
return 1;
}
fs = fopen("salida.txt", "w");
if (fs==NULL){
printf("Error al abrir el fichero de salida");
return 1;
}
printf("Introduzca dos valores enteros:\n");
fscanf(fe, "%d%d", &a, &b);
fprintf(fs, "%d + %d = %d\n", a, b, a+b);
return 0;
}
43
Ejemplo
Paso 5. Cerrar los ficheros.
Paso 6. Eliminar el printf destinado al usuario.
int main()
{
int a, b;
FILE *fe, *fs;
fe = fopen("entrada.txt", "r");
if (fe==NULL){
printf("Error al abrir el fichero de entrada");
return 1;
}
fs = fopen("salida.txt", "w");
if (fs==NULL){
printf("Error al abrir el fichero de salida");
return 1;
}
printf("Introduzca dos valores enteros:\n");
fscanf(fe, "%d%d", &a, &b);
fprintf(fs, "%d + %d = %d\n", a, b, a+b);
fclose(fe);
fclose(fs);
return 0;
}
44
Ejemplo
int main()
{
4 5
int a, b;
FILE *fe, *fs;
fe = fopen("entrada.txt", "r");
if (fe==NULL){
printf("Error al abrir el fichero de entrada"); Entrada.txt
return 1;
}
fs = fopen("salida.txt", "w");
if (fs==NULL){
printf("Error al abrir el fichero de salida");
return 1;
}
fscanf(fe, "%d%d", &a, &b);
fprintf(fs, "%d + %d = %d\n", a, b, a+b);
fclose(fe); 4+5=9
fclose(fs);
return 0;
}
Salida.txt
45
Ejemplo
Solicitar al usuario el día del mes en que nos
encontramos (valor numérico entre 1 y 30).
46
Ejemplo
int main()
{
int dia, manyana;
FILE *f;
f=fopen("datos.txt", "w");
if (f==NULL){
printf("Error al abrir el fichero");
return 1;
}
printf("Introduce el día: ");
scanf("%d", &dia);
manyana = dia % 30 + 1;
47
Ejercicio
Desarrollar un programa que pida al usuario un número entero y
escriba en un fichero (potencias.txt) dicho número, su cuadrado y
su raíz cuadrada (cada valor en una línea). Ejemplo:
Dame número: 21
49
Ejercicio
En el fichero "loteria.txt" se tiene el número de lotería con el
que jugamos.
Se pide desarrollar un programa que lea dicho número y
escriba en el fichero "terminacion.txt" la terminación del
numero leído.
50
Posible solución
int main()
{
int num,terminacion;
FILE *lec, *escr;
lec = fopen("loteria.txt", "r");
if (lec==NULL){
printf("Error al abrir el fichero loteria.txt");
return 1;
}
escr = fopen("terminacion.txt", "w");
if (escr==NULL){
printf("Error al abrir el fichero terminacion.txt");
return 1;
}
fscanf (lec,"%d", &num); /* leer número de fichero loteria.txt */
terminacion = num % 10;
fprintf (escr, "%d", terminacion); /* escribir terminación en fichero terminacion.txt */
fclose(lec);
fclose(escr);
return 0;
}
51