Hola amigos, tengo un problema con un programa en lenguaje C, tengo que entregarlo el lunes pero llevo días y me he hecho un cacao en la cabeza.
Es un programa con 2 estructuras de datos, una de peliculas y otra de actores, las peliculas contienen actores.
El problema llega cuando llego al case 2, tengo que...
2 – Alta actor.
Pediremos el título de la película donde queremos dar de alta el actor.
Buscaremos la película por el título para saber si ya existe en el vector. Si no existe daremos un mensaje de error. En caso de que si exista:
-Buscaremos si hay una posición libre en el vector de actores de la película para guardar el actor.
-Si no hay posiciones libres daremos un mensaje de error. En caso de que si haya posiciones libres:
-Crearemos un actor. Para ello pediremos los datos del actor, es decir, el nombre del actor, la edad y el sexo.
-Buscaremos el actor por el nombre en la película.
-En caso de existir daremos un mensaje de error. En caso contrario añadiremos el actor en la posición libre que hemos buscado anteriormente.
Creo el actor en la estructura de actores, pero... como hago para introducir el actor en la posicion libre de peliculas?
No se si esta bien, me lo han complicado mas diciendome que tengo que pasar la posicion exacta del array de la estructura donde quiero introducir, no todo el array y me esta echando fuego la cabeza.
Gracias.
Aqui esta el archivo .cpp
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define MAX 100
struct actores{
char nombre[30];
int edad;
char sexo[1];
};
struct peliculas {
char titulo[50];
char director[35];
int calificacion;
struct actores act[5];
};
#include "funciones.h"
void main(){
struct actores actor[MAX];
struct peliculas pelicula[MAX];
int opcion, i, e, celda, celda2;
char peli[20], actorr[20], sexo[1], nom[20];
rellenar(pelicula);
do{
opcion=menu();
switch(opcion){
case 1:
celda = celdalibre(pelicula);
if(celda!= -1){
introducirpel(&pelicula[celda]);
printf("\n Se ha introducido la pelicula correctamente");
}else{
printf("\nNo hay espacio libre para introducir peliculas");
}
break;
case 2:
printf("\nIntroduce el titulo de la pelicula para el actor: ");
fflush(stdin);
gets(peli);
celda = buscarpeli(pelicula, peli);
if(celda!= -1){
celda2 = buscarpos(&pelicula[celda],celda);
/*printf("\nNombre del actor: ");
fflush(stdin);
gets(nom);
*/
if(celda2 != -1){
introduciract(&pelicula[celda].act[celda2]);
}else{
printf("\nActor repetido");
}
}else{
printf("\nNo se encuentra la pelicula");
}
break;
Aqui el archivo de funciones, el .h
int menu(){
int opcion;
do{
printf("\n<----------APLICACION DEL CINEFILO---------->");
printf("\n1.Alta pelicula.");
printf("\n2.Alta actor.");
printf("\n3.Mostrar pelicula.");
printf("\n4.Borrar pelicula.");
printf("\n5.Borrar actor.");
printf("\n6.Mostrar actores por sexo.");
printf("\n7.Guardar peliculas");
printf("\n8.Recuperar peliculas");
printf("\n0.Salir");
printf("\n");
printf("\nOpcion: ");
fflush(stdin);
scanf("%d", &opcion);
}while(opcion<0 || opcion>8);
return opcion;
}
int celdalibre(struct peliculas pelicula[]){
int i=0;
while(pelicula[i].calificacion != 0 && i<MAX ){
i++;
}
if (i==MAX){
return -1;
}
else{
return i;
}
}
int buscarpeli(struct peliculas pelicula[], char peli[]){
int i=0;
while(strcmp(pelicula[i].titulo,peli)!=0 && i<MAX ){
i++;
}
if (i==MAX){
return -1;
}
else{
return i;
}
}
void introducirpel(struct peliculas *pelicula){
printf("Titulo de la pelicula: ");
fflush(stdin);
gets(pelicula->titulo);
printf("Nombre del director: ");
fflush(stdin);
gets(pelicula->director);
do{
printf("Calificacion: ");
fflush(stdin);
scanf("%d", &pelicula->calificacion);
}while(pelicula->calificacion<1 || pelicula->calificacion>5);
}
int buscarpos(struct peliculas pelicula[], int celda, char nom[]){
int y=0, e=0;
if(y==5){
return -1;
if(pelicula[celda].act[y].edad==0){
return y;
}
y++;
}
}
bool introduciract(struct actores *actor){
int e=0;
printf("\nNombre del actor: ");
fflush(stdin);
scanf("%d", &actor->nombre);
do{
printf("\nEdad del actor: ");
fflush(stdin);
scanf("%d", &actor->edad);
}while(actor->edad <14 || actor->edad >85);
//do{
printf("\nSexo del actor: ");
fflush(stdin);
gets(actor->sexo);
//}while(pelicula->act->sexo !='h' || pelicula);
return true;
}