Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/07/2015, 11:07
GerardoVF78
 
Fecha de Ingreso: junio-2015
Mensajes: 4
Antigüedad: 8 años, 10 meses
Puntos: 0
Pregunta Problema con la función printf()

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
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. //Vamos a hacer una función que recoja la arias que se desean cantar en una funcion y sus respectivos cantantes
  6.  
  7. struct cantante{
  8.     char nombre[20];
  9.     char apellido[20];
  10.     char tesitura_c[20];
  11.     struct cantante *siguiente;
  12. };
  13.  
  14. typedef struct cantante Tcantante; /*Cantante*/
  15.  
  16. struct aria{
  17.     char nombre[60]; /*Nombre del Aria*/
  18.     char autor[20];  
  19.     int tiempo, anio;  /*Duración del aria y año de composición*/
  20.     float popularidad; /*Medida del 1 al 10*/
  21.     char tesitura_a[20];
  22.     //Tcantante interprete;  
  23.     struct aria* siguiente;     /*Siguiente interpretacion*/   
  24. };
  25.  
  26. typedef struct aria Taria; /*Aria*/
  27.  
  28. int IntroducirCantante(Tcantante **);
  29. int IntroducirAria(Taria **);
  30. void VistaPreliminar(Tcantante *, Taria *);
  31. void Bienvenida();
  32. void Despedida();
  33. void menu();
  34.  
  35. int main (){
  36.    
  37.     Bienvenida();
  38.     menu();
  39.     Despedida();   
  40.    
  41.     return 0;
  42.    
  43. }
  44.  
  45. int IntroducirCantante(Tcantante **Inicio){ //Función para introducir un cantante
  46.    
  47.     Tcantante *cantante;
  48.     Tcantante *Recorrer;
  49.     Tcantante *Ultimo;
  50.    
  51.     Recorrer = *Inicio;
  52.    
  53.     while(Recorrer!=NULL){
  54.        
  55.         Ultimo = Recorrer;
  56.         Recorrer = Recorrer->siguiente;
  57.     }
  58.    
  59.     cantante = (Tcantante *) malloc(sizeof(Tcantante));
  60.    
  61.     if(cantante==NULL)
  62.         return -1;
  63.        
  64.     printf("\nIndicar nombre: ");
  65.     scanf("%s", cantante->nombre);
  66.    
  67.     fflush(stdin);
  68.    
  69.     printf("\nIndicar apellido: ");
  70.     scanf("%s", cantante->apellido);
  71.    
  72.     fflush(stdin);
  73.    
  74.     printf("\nIndicar tesitura: ");
  75.     scanf("%s", cantante->tesitura_c);
  76.    
  77.     fflush(stdin);
  78.    
  79.     cantante->siguiente = NULL;
  80.    
  81.     printf("\nEl cantante introducido se llama %s %s, y es %s.\n\n", cantante->nombre, cantante->apellido, cantante->tesitura_c);
  82.    
  83.     if(Ultimo == NULL)
  84.         *Inicio = cantante;
  85.     else
  86.         Ultimo->siguiente = cantante;  
  87.    
  88.     return 0;
  89. }
  90.  
  91. int IntroducirAria(Taria **funcion){ //Función para introducir un aria
  92.    
  93.     Taria *aria;
  94.     Taria *Recorrer;
  95.     Taria *Ultima;
  96.    
  97.     Recorrer = *funcion;
  98.    
  99.     while(Recorrer!=NULL){
  100.         Ultima = Recorrer;
  101.         Recorrer = Recorrer->siguiente;
  102.     }
  103.    
  104.     aria = (Taria *) malloc(sizeof(Taria));
  105.    
  106.     if(aria==NULL)
  107.         return -1;
  108.        
  109.     printf("\nIndicar nombre: ");
  110.     scanf("%s", aria->nombre);
  111.    
  112.     fflush(stdin);
  113.    
  114.     printf("\nIndicar autor: ");
  115.     scanf("%s", aria->autor);
  116.    
  117.     fflush(stdin);
  118.    
  119.     printf("\nIndicar tesitura del aria: ");
  120.     scanf("%s", aria->tesitura_a);
  121.    
  122.     fflush(stdin);
  123.    
  124.     printf("\nIndique el anio de creacion: ");
  125.     scanf("%i", &aria->anio);
  126.    
  127.     printf("\nIndique la puntuacion de la obra: ");
  128.     scanf("%f", &aria->popularidad);
  129.    
  130.     printf("\nIndique la duracion del aria: ");
  131.     scanf("%d", &aria->tiempo);
  132.    
  133.     aria->siguiente = NULL;
  134.    
  135.     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);
  136.    
  137.      
  138.    
  139.     if(Ultima == NULL)
  140.         *funcion = aria;
  141.     else
  142.         Ultima->siguiente = aria;
  143.        
  144.     return 0;
  145.    
  146. }
  147.  
  148. void VistaPreliminar(Tcantante *Inicio, Taria *funcion){
  149.    
  150.     Tcantante *Recorrer_c = Inicio;
  151.     Taria *Recorrer_a = funcion;
  152.    
  153.     printf("De momento ha introducido los siguientes cantantes: \n");
  154.    
  155.     while(Recorrer_c!=NULL && Inicio!=NULL){
  156.         printf("%s %s, %s\n", Recorrer_c->nombre, Recorrer_c->apellido, Recorrer_c->tesitura_c);
  157.         Recorrer_c = Recorrer_c->siguiente;
  158.     }
  159.    
  160.     printf("\nY las siguientes arias: \n");
  161.    
  162.     while(Recorrer_a!=NULL && funcion!=NULL);{
  163.         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");
  164.         Recorrer_a = Recorrer_a->siguiente;
  165.     }
  166.    
  167.    
  168.    
  169.  
  170. }
  171.  
  172.  
  173. void Bienvenida(){ //Mensaje de bienvenida
  174.    
  175.     printf("\n/---------------------------------------------/\n");
  176.     printf("/----------PROGRAMADOR DE LA FUNCION----------/\n");
  177.     printf("/---------------------------------------------/\n\n");
  178.    
  179.     printf("El objetivo de este programa es el de proporcionarle una\nherramienta para poder realizar su tan ansiada funcion musical.\n\n");
  180.     printf("Elija los cantantes que van a interpretar dicha funcion y haga\nuna hoja con el curso de las arias. \n\n");
  181.    
  182. }
  183.  
  184. void Despedida(){ //Mensaje de despedida
  185.    
  186.     printf("/--------------------------------------------/\n");
  187.     printf("/--------GRACIAS POR USAR EL PROGRAMA--------/\n");
  188.     printf("/--------------------------------------------/\n\n");
  189.    
  190. }
  191.  
  192. void menu(){
  193.    
  194.     int opcion;
  195.    
  196.     Taria* funcion = NULL;
  197.     Tcantante* Inicio = NULL;
  198.    
  199.     do{
  200.         printf("/---------------MENU PRINCIPAL---------------/\n");
  201.         printf("/ (1) Introducir cantante                    /\n");
  202.         printf("/ (2) Introducir arias                       /\n");
  203.         printf("/ (3) Eliminar cantantes                     /\n");
  204.         printf("/ (4) Eliminar arias                         /\n");
  205.         printf("/ (5) Vista preliminar                       /\n");
  206.         printf("/ (6) Exportar funcion                       /\n");
  207.         printf("/ (7) Eliminar todo                          /\n");
  208.         printf("/ (8) Salir                                  /\n");
  209.         printf("/--------------------------------------------/\n\n");
  210.    
  211.         printf("Elija una opcion: ");
  212.         scanf("%d", &opcion);
  213.        
  214.         switch(opcion){
  215.             case 1: IntroducirCantante(&Inicio);
  216.                     break;
  217.                    
  218.             case 2: IntroducirAria(&funcion);
  219.                     break;
  220.                    
  221.             case 5: VistaPreliminar(Inicio, funcion);
  222.         }  
  223.    
  224.     }
  225.    
  226.     while(opcion!=8);
  227. }

El error ocurre en la función "VistaPreliminar". No tengo ni idea de por qué no sale por pantalla.