A riesgo de repetir las soluciones que ya te han dado ...
El problema en la función "recoger_libro" no es la declaración del parámetro "libro" sino su uso.
Cuando una función se declara de esta forma:
void recoger_libro(T_libreria libro[]) ...
Se procesa como si el parámetro fuera declarado así:
void recoger_libro(T_libreria *libro) ...
Y para acceder al objeto apuntado por "libro" debes utilizar el operador "[]" (como ya te indicaron) o bien el operador "->".
Por ello hay que cambiar esa funcion a:
int recoger_libro(T_libreria libro[])
{
int n, i;
printf("Libros a introducir? ");
for (i = 0; i < n; i++){
printf("A%co de publicaci%cn: ", 164, 162); scanf("%d", &libro
[i
].
fecha_publicacion.
anno);
printf("Mes de publicaci%cn: ", 162); scanf("%d", &libro
[i
].
fecha_publicacion.
mes);
}
return i;
}
También hay que evitar el uso de la función "gets" utilizando en su lugar "fgets". Mas información sobre el tema en
|Lo que no hay que hacer en C/C++. Nivel basico|.
Un saludo