Buenas, estoy haciendo un código que permita introducir actores y canciones (de ópera) en varias listas para después exportarlo, sin embargo, la función que tendría que mostrar todos los datos introducidos da un error:
Código C:
Ver original#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//Vamos a hacer una función que recoja la arias que se desean cantar en una funcion y sus respectivos cantantes
struct cantante{
char nombre[20];
char apellido[20];
char tesitura_c[20];
struct cantante *siguiente;
};
typedef struct cantante Tcantante; /*Cantante*/
struct aria{
char nombre[60]; /*Nombre del Aria*/
char autor[20];
int tiempo, anio; /*Duración del aria y año de composición*/
float popularidad; /*Medida del 1 al 10*/
char tesitura_a[20];
//Tcantante interprete;
struct aria* siguiente; /*Siguiente interpretacion*/
};
typedef struct aria Taria; /*Aria*/
int IntroducirCantante(Tcantante **);
int IntroducirAria(Taria **);
void VistaPreliminar(Tcantante *, Taria *);
void Bienvenida();
void Despedida();
void menu();
int main (){
Bienvenida();
menu();
Despedida();
return 0;
}
int IntroducirCantante(Tcantante **Inicio){ //Función para introducir un cantante
Tcantante *cantante;
Tcantante *Recorrer;
Tcantante *Ultimo;
Recorrer = *Inicio;
while(Recorrer!=NULL){
Ultimo = Recorrer;
Recorrer = Recorrer->siguiente;
}
cantante
= (Tcantante
*) malloc(sizeof(Tcantante
));
if(cantante==NULL)
return -1;
scanf("%s", cantante
->nombre
);
printf("\nIndicar apellido: "); scanf("%s", cantante
->apellido
);
printf("\nIndicar tesitura: "); scanf("%s", cantante
->tesitura_c
);
cantante->siguiente = NULL;
printf("\nEl cantante introducido se llama %s %s, y es %s.\n\n", cantante
->nombre
, cantante
->apellido
, cantante
->tesitura_c
);
if(Ultimo == NULL)
*Inicio = cantante;
else
Ultimo->siguiente = cantante;
return 0;
}
int IntroducirAria(Taria **funcion){ //Función para introducir un aria
Taria *aria;
Taria *Recorrer;
Taria *Ultima;
Recorrer = *funcion;
while(Recorrer!=NULL){
Ultima = Recorrer;
Recorrer = Recorrer->siguiente;
}
aria
= (Taria
*) malloc(sizeof(Taria
));
if(aria==NULL)
return -1;
scanf("%s", aria
->nombre
);
scanf("%s", aria
->autor
);
printf("\nIndicar tesitura del aria: "); scanf("%s", aria
->tesitura_a
);
printf("\nIndique el anio de creacion: "); scanf("%i", &aria
->anio
);
printf("\nIndique la puntuacion de la obra: "); scanf("%f", &aria
->popularidad
);
printf("\nIndique la duracion del aria: "); scanf("%d", &aria
->tiempo
);
aria->siguiente = NULL;
printf("\nEl aria para %s fue compuesta por %s en %d.\nSe llama %s y dura %d segundos.\nSu puntuacion es de %.2f/10.\n\n", aria
->tesitura_a
, aria
->autor
, aria
->anio
, aria
->nombre
, aria
->tiempo
, aria
->popularidad
);
if(Ultima == NULL)
*funcion = aria;
else
Ultima->siguiente = aria;
return 0;
}
void VistaPreliminar(Tcantante *Inicio, Taria *funcion){
Tcantante *Recorrer_c = Inicio;
Taria *Recorrer_a = funcion;
printf("De momento ha introducido los siguientes cantantes: \n");
while(Recorrer_c!=NULL && Inicio!=NULL){
printf("%s %s, %s\n", Recorrer_c
->nombre
, Recorrer_c
->apellido
, Recorrer_c
->tesitura_c
); Recorrer_c = Recorrer_c->siguiente;
}
printf("\nY las siguientes arias: \n");
while(Recorrer_a!=NULL && funcion!=NULL);{
printf("Aria para %s\n compuesta por %s en %d.\nSe llama %s y dura %d segundos.\nSu puntuacion es de %.2f/10.\n\n"); Recorrer_a = Recorrer_a->siguiente;
}
}
void Bienvenida(){ //Mensaje de bienvenida
printf("\n/---------------------------------------------/\n"); printf("/----------PROGRAMADOR DE LA FUNCION----------/\n"); printf("/---------------------------------------------/\n\n");
printf("El objetivo de este programa es el de proporcionarle una\nherramienta para poder realizar su tan ansiada funcion musical.\n\n"); printf("Elija los cantantes que van a interpretar dicha funcion y haga\nuna hoja con el curso de las arias. \n\n");
}
void Despedida(){ //Mensaje de despedida
printf("/--------------------------------------------/\n"); printf("/--------GRACIAS POR USAR EL PROGRAMA--------/\n"); printf("/--------------------------------------------/\n\n");
}
void menu(){
int opcion;
Taria* funcion = NULL;
Tcantante* Inicio = NULL;
do{
printf("/---------------MENU PRINCIPAL---------------/\n"); printf("/ (1) Introducir cantante /\n"); printf("/ (2) Introducir arias /\n"); printf("/ (3) Eliminar cantantes /\n"); printf("/ (4) Eliminar arias /\n"); printf("/ (5) Vista preliminar /\n"); printf("/ (6) Exportar funcion /\n"); printf("/ (7) Eliminar todo /\n"); printf("/--------------------------------------------/\n\n");
switch(opcion){
case 1: IntroducirCantante(&Inicio);
break;
case 2: IntroducirAria(&funcion);
break;
case 5: VistaPreliminar(Inicio, funcion);
}
}
while(opcion!=8);
}
El error ocurre en la función "VistaPreliminar". No tengo ni idea de por qué no sale por pantalla.