Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/05/2015, 10:58
IVICP3
 
Fecha de Ingreso: febrero-2015
Mensajes: 61
Antigüedad: 9 años, 3 meses
Puntos: 0
Problema con estructuras en C

Buenas tengo un problema con un programa usando structs.

Programa donde guardo structs de peliculas y actores. En el case 1 del switch guardo una pelicula, pero en el case 2 es donde tengo problemas.

El programa esta incompleto a partir del case 3.





En la funcion "bool introduciract" lo que estoy haciendo es primero comprobar si la peli que le he pasado existe, si existe comprobamos si queda hueco para introducir un actor (máximo 5), y por ultimo si hay hueco pues creo un actor.

Tras esto, hago un for que recorre 5 veces la estructura de pelicula, para saber si en la pelicula hay un actor igual al que acabo de crear (su nombre vamos) , sino hay uno igual tengo que introducir el actor que acabo de crear en el hueco libre (que es "pos").

Como hago eso??? Como introduzco en ese hueco libre el actor que acabo de crear, no se programar esa linea ya que he probado varias formas y me da error el programa. Solo tengo un "return true", para saber que ha entrado dentro del if.


GRACIAS.





PROGRAMA PRINCIPAL
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<string.h>
  4.  
  5. #define MAX 100
  6. #define MAX2 5
  7.  
  8. struct actores{
  9.     char nombre[30];
  10.     int edad;
  11.     char sexo[1];
  12. };
  13.  
  14. struct peliculas {
  15.     char titulo[50];
  16.     char director[35];
  17.     int calificacion;
  18.     struct actores act[5];
  19. };
  20.  
  21. #include "funciones.h"
  22.  
  23.  
  24. void main(){
  25.     struct actores actor[MAX];
  26.     struct peliculas pelicula[MAX];
  27.     int opcion, i;
  28.     char peli[50];
  29.  
  30.  
  31.     for(i=0;i<MAX;i++){
  32.         pelicula[i].titulo[0]='0';
  33.         pelicula[i].director[0]='0';
  34.         pelicula[i].calificacion=0;
  35.         pelicula[i].act[i].nombre[0]='0';
  36.         pelicula[i].act[i].edad=0;
  37.         pelicula[i].act[i].sexo[0]='0';
  38.     }
  39.  
  40.  
  41.  
  42.  
  43.  
  44.     cargar(pelicula);
  45.  
  46.  
  47.  
  48.     do{
  49.     opcion=menu();
  50.  
  51.  
  52.     switch(opcion){
  53.     case 1:
  54.         if(celdalibre(pelicula)==true){
  55.             introducirpel(pelicula);
  56.  
  57.         }else{
  58.             printf("\nNo hay espacio libre para introducir peliculas");
  59.         }
  60.         break;
  61.  
  62.     case 2:
  63.         printf("\nIntroduce el titulo de la pelicula para el actor: ");
  64.         fflush(stdin);
  65.         gets(peli);
  66.  
  67.         if(introduciract(actor, pelicula, peli)==true){
  68.             printf("Actor introducido correctamente");
  69.                
  70.  
  71.         }else{
  72.             printf("\nError:(");
  73.  
  74.         }
  75.         break;
  76.  
  77.     case 3:
  78.  
  79.         break;
  80.  
  81.     case 4:
  82.  
  83.         break;
  84.  
  85.     case 5:
  86.  
  87.         break;
  88.  
  89.     case 6:
  90.  
  91.         break;
  92.     }
  93.  
  94.  
  95.     }while(opcion!=0);
  96.  
  97.  
  98.     printf("\n");
  99.  
  100.     system("pause");
  101.  
  102.  
  103.  
  104. }




LIBRERIA DEL PROGRAMA
FUNCIONES.H
Código C:
Ver original
  1. int menu(){
  2.     int opcion;
  3.  
  4.     do{
  5.     printf("\n<----------APLICACION DEL CINEFILO---------->");
  6.     printf("\n1.Alta pelicula.");
  7.     printf("\n2.Alta actor.");
  8.     printf("\n3.Mostrar pelicula.");
  9.     printf("\n4.Borrar película.");
  10.     printf("\n5.Borrar actor.");
  11.     printf("\n6.Mostrar actores por sexo.");
  12.     printf("\n0.Salir");
  13.     printf("\n");
  14.  
  15.     printf("\nOpcion: ");
  16.     fflush(stdin);
  17.     scanf("%d", &opcion);
  18.     }while(opcion<0 || opcion>6);
  19.  
  20.     return opcion;
  21. }
  22.  
  23.  
  24.  
  25.  
  26. bool celdalibre(struct peliculas *pelicula){
  27.     int i;
  28.  
  29.     for(i=0;i<MAX;i++){
  30.         if(pelicula[i].calificacion==0){
  31.             return true;
  32.         }
  33.     }
  34.  
  35.     return false;
  36. }
  37.  
  38.  
  39. void introducirpel(struct peliculas *pelicula){
  40.  
  41.     while(pelicula->calificacion!=0){
  42.         pelicula++;
  43.     }
  44.  
  45.     printf("Titulo de la pelicula: ");
  46.     fflush(stdin);
  47.     gets(pelicula->titulo);
  48.  
  49.     printf("Nombre del director: ");
  50.     fflush(stdin);
  51.     gets(pelicula->director);
  52.  
  53.     do{
  54.     printf("Calificacion: ");
  55.     fflush(stdin);
  56.     scanf("%d", &pelicula->calificacion);
  57.     }while(pelicula->calificacion<1 || pelicula->calificacion>5);
  58. }
  59.  
  60. bool introduciract(struct actores *actor, struct peliculas *pelicula, char peli[]){
  61.     int i, pos=0;
  62.  
  63.  
  64.     for(i=0;i<MAX;i++,pelicula++){
  65.         if(strcmp(pelicula[i].titulo,peli)==0){
  66.             if((pelicula[i].act[i].edad)==0){
  67.                 i=pos;
  68.  
  69.                 printf("\nCreando actor");
  70.  
  71.                 printf("\nNombre actor/iz: ");
  72.                 fflush(stdin);
  73.                 gets(actor->nombre);
  74.  
  75.                
  76.                 do{
  77.                     printf("\nEdad del actor/iz: ");
  78.                     fflush(stdin);
  79.                     scanf("%d", &actor->edad);
  80.                 }while(actor->edad<14 || actor->edad>90);
  81.  
  82.                 printf("\nSexo del actor/iz [H/M]: ");
  83.                 fflush(stdin);
  84.                 gets(actor->sexo);
  85.  
  86.                 int e = 0;
  87.                 for(e=0;e<5;e++){
  88.                     if(pelicula[pos].act[e].nombre != actor[i].nombre){
  89.                        
  90.                        
  91.                         return true;
  92.                    
  93.                 }else{
  94.                     printf("\nACTOR ENCONTRADO");
  95.                 }
  96.  
  97.             }
  98.         }
  99.     }
  100.     return false;
  101.  
  102. }
  103.  
  104. }
  105.  
  106.  
  107.  
  108.  
  109.  
  110. void cargar(struct peliculas *pelicula){
  111.     FILE *pelicula1;
  112.  
  113.     if((pelicula1=fopen("pelicula1.dat","rb"))!=NULL){
  114.         fread(pelicula,sizeof(struct peliculas),MAX,pelicula1);
  115.         fclose(pelicula1);
  116.     }
  117. }