#include <stdio.h>

#define MAX_JUG 10
#define MAX_CAR 20

typedef struct{
	int dia;
	int mes;
	int anyo;
}tfecha;

typedef struct{
	char nombre[MAX_CAR]; //Nombre del jugador
	int edad; //Edad del jugador
	int goles; //Goles marcados por jugador
	tfecha fecha; //Fecha de incorporacion al equipo
}tjugador;

typedef struct{
	char equipo[MAX_CAR]; //Nombre del equipo
	int num; //Numero de jugadores actuales
	tjugador lista[MAX_JUG]; //Lista jugadores del equipo
}tequipo;

void mostrar_fecha(tfecha f) {
	printf("%02d %02d %04d\n", f.dia, f.mes, f.anyo);
}

void mostrar_jugador(tjugador j) {
	int i;

	for(i=0;j.nombre[i]!='.';i++) {
		printf("%c", j.nombre[i]);
	}
	printf(".:%d:%d:", j.edad, j.goles);
	mostrar_fecha(j.fecha);
}

void mostrar_equipo(tequipo e) {
	int i;

	for(i=0;e.equipo[i]!='.';i++) {
		printf("%c", e.equipo[i]);
	}
	printf(".:%d\n", e.num);
	for(i=0;i<e.num;i++) {
		mostrar_jugador(e.lista[i]);
	}
}

/*
 * mostrar_equipo2() hace lo mismo que mostrar_equipo()
 * pero sin invocar a otras funciones.
 * Lo pongo para que veais cosas como "e.lista[i].fecha.mes".
 */

void mostrar_equipo2(tequipo e) {
	int i, j;

	for(i=0;e.equipo[i]!='.';i++) {
		printf("%c", e.equipo[i]);
	}
	printf(".:%d\n", e.num);
	for(i=0;i<e.num;i++) {
		for(j=0;e.lista[i].nombre[j]!='.';j++) {
			printf("%c", e.lista[i].nombre[j]);
		}
		printf(".:%d:%d:", e.lista[i].edad, e.lista[i].goles);
		printf("%02d %02d %04d\n", e.lista[i].fecha.dia,
			e.lista[i].fecha.mes, e.lista[i].fecha.anyo);
	}
}

void leer_fecha(tfecha *f) {
	scanf("%d %d %d%*c", &f->dia, &f->mes, &f->anyo); // "%*c" elimina el '\n' del buffer de entrada
}

void leer_jugador(tjugador *j) {
	int i;
	char c='\0';
	for(i=0;c!='.';i++) {
		scanf("%c", &c);
		j->nombre[i] = c;
	}
	scanf(":%d:%d:", &j->edad, &j->goles);
	leer_fecha(&j->fecha);
}

void leer_equipo(tequipo *e) {
	int i; char c='\0';
	
	for(i=0;c!='.';i++) {
		scanf("%c", &c);
		e->equipo[i] = c;
	}
	scanf(":%d%*c", &e->num); // "%*c" elimina el '\n' del buffer de entrada
	for(i=0;i<e->num;i++) {
		leer_jugador(&e->lista[i]);
	}
}

/*
 * leer_equipo2() hace lo mismo que leer_equipo()
 * pero sin invocar a otras funciones.
 * sirve para que veais cosas que es "&e->lista[i].fecha.mes"
 * y no "&e->lista[i]->fecha->mes"
 */

void leer_equipo2(tequipo *e) {
	int i, j;
	char c;
	
	for(i=0, c='\0';c!='.';i++) {
		scanf("%c", &c);
		e->equipo[i] = c;
	}
	scanf(":%d%*c", &e->num); // "%*c" elimina el '\n' del buffer de entrada
	for(i=0;i<e->num;i++) {
		for(j=0,c='\0';c!='.';j++) {
			scanf("%c", &c);
			e->lista[i].nombre[j] = c;
		}
		scanf(":%d:%d:%d %d %d%*c", &e->lista[i].edad,
			&e->lista[i].goles, &e->lista[i].fecha.dia,
			&e->lista[i].fecha.mes,	&e->lista[i].fecha.anyo); // "%*c" elimina el '\n' del buffer de entrada
	}
}

main() {
	tfecha f = {1,7,1998};
	tjugador j = {"Xavi.",32,13,{1,7,1998}};
	tequipo eq = {"Barza.", 3, {
		{"Xavi.",32,13,{1,7,1998}},
		{"Messi.",24,58,{1,7,2004}},
		{"Pujol.",33,3,{1,7,1999}}}};

//	leer_fecha(&f);
//	mostrar_fecha(f);
//	leer_jugador(&j);
//	mostrar_jugador(j);

	printf("MUESTRO EQUIPO:\n");
	mostrar_equipo(eq);
	printf("LEO EQUIPO CON EL MISMO FORMATO:\n");
	leer_equipo(&eq);
	printf("MUESTRO EQUIPO:\n");
	mostrar_equipo(eq);

	printf("LEO EQUIPO CON EL MISMO FORMATO:\n");
	leer_equipo2(&eq);
	printf("MUESTRO EQUIPO:\n");
	mostrar_equipo2(eq);
}

/*
 * ""scanf("\n");"" antes hacer ""scanf("%c", &c);"" donde sospechamos que
 * puede haver un '\n' que no queremos leer, eliminara todos los ' ' y '\n'
 * del buffer de entrada.
 * La alternativa es hacer un ""scanf("%*c");"" cada vez que sepamos que el
 * usuario introduce un retorno de carro. (En este caso al final del numero
 * de jugadores y de los anyos de incorporacion de cada jugador).
 */

