#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
#define N 100
enum clase
{
libro, revista
};
typedef struct
{
unsigned numref;
char titulo[30];
char autor[20];
char editorial[25];
enum clase libro_revista;
union
{
struct
{
unsigned edicion;
unsigned anyo;
}libros;
char nomrev[30];
}lr;
}tficha;
void escribir(tficha bibli[], int n);
int leer(tficha bibli[], int n);
main()
{
static tficha biblioteca[N];
int n = 0;
system("cls");
printf("Introducir datos..n"); getch();
n = leer(biblioteca, N); ------------------------------------------------> se asigna a n el valor entero que devuelve la función leer.Este introducirá los datos contenidos en las diferentes posiciones de la matriz de estructuras,m0,0,m0,1,m0,2,.Este valor será las veces que se repita el bucle while.
system("cls");
printf("Listado de libros y revistasn");
escribir(biblioteca, n);-------------------------------------------------> se pasa a la función escribir, los parámetros biblioteca y n . 'n' le dirá el numero de datos introducidos haciendo de tope para la variable 'k' de la función escribir.
}
int leer(tficha bibli[], int NMAX)
{
int clase;
char resp = 's';
int k = 0;
while(tolower(resp) == 's' && k < NMAX)
{
system("cls");
printf("Numero de referencia: ");
scanf("%u", &bibli[k].numref); fflush(stdin);
printf("Titulo: "); gets(bibli[k].titulo);
printf("Autor: "); gets(bibli[k].autor);
printf("Editorial: "); gets(bibli[k].editorial);
do
{
printf("Libro o revista(0 = libro, 1 = revista) ");
scanf("%d", &clase); fflush(stdin);
}
while(clase != 0 && clase != 1);
if(clase == libro)
{
bibli[k].libro_revista = libro;
printf("Edicion: ");
scanf("%u", &bibli[k].lr.libros.edicion);
printf("Anyo de publi: ");
scanf("%u",&bibli[k].lr.libros.anyo); fflush(stdin);
}
else
{
bibli[k].libro_revista = revista;
printf("Nombre revista "); gets(bibli[k].lr.nomrev);
}
k++;
do
{
printf("nMas datos a introducir (s/n): ");
resp = getchar();
fflush(stdin);
}
while(tolower(resp) != 's' && tolower(resp) != 'n');
}
return k;
}
void escribir(tficha bibli[], int n)
{
int k = 0;
for(k = 0; k < n; k++)
{
printf("%d %sn", bibli[k].numref, bibli[k].titulo);
printf("%s - Ed. %sn", bibli[k].autor, bibli[k].editorial);
switch (bibli[k].libro_revista)
{
case libro:
printf("Edicion %u - anyo %un", bibli[k].lr.libros.edicion,
bibli[k].lr.libros.anyo);
break;
case revista:
printf("%sn", bibli[k].lr.nomrev);
}
printf("Pulse <Entrar> para continuar");
getchar();
system("cls");
}
}