Foros del Web » Programación para mayores de 30 ;) » C/C++ »

¿Como controlar esta excepcion en C?

Estas en el tema de ¿Como controlar esta excepcion en C? en el foro de C/C++ en Foros del Web. Tngo un programa que introduce peliculas en una struct, pero tengo que controlar que el nombre de un actor no este en una pelicula. A ...
  #1 (permalink)  
Antiguo 15/05/2015, 05:49
 
Fecha de Ingreso: febrero-2015
Mensajes: 61
Antigüedad: 9 años, 9 meses
Puntos: 0
¿Como controlar esta excepcion en C?

Tngo un programa que introduce peliculas en una struct, pero tengo que controlar que el nombre de un actor no este en una pelicula. A ver si me podeis ayudar.


Antes de nada os enseño las estructuras de mi programa:

Código C:
Ver original
  1. struct actores{
  2.     char nombre[30];
  3.     int edad;
  4.     char sexo[1];
  5. };
  6.  
  7. struct peliculas {
  8.     char titulo[50];
  9.     char director[35];
  10.     int calificacion;
  11.     struct actores act[5];
  12. };



Aqui teneis varias partes de codigo, primero inicializo todos los valores de la estructura.
Luego, le pido al usuario el nombre de una pelicula, posteriormente llamo a una funcion.

En la funcion comparo si la pelicula que me ha dado el usuario y la que tengo en la estructura coincide, si coincide miro si hay algun actor libre (como pone en la estructura de arriba, máximo 5 actores, por eso el 'for') viendo si la edad es igual a 0 (quiere decir que no se ha introducido ningun actor ahi).

Cuando he localizado un hueco donde hay un actor libre le pido al usuario un nombre y aqui es donde tengo el fallo (LINEA 57, ESE WHILE ESTA MAL).

Tengo que mirar en todos los actores de la estructura si hay un actor con el mismo nombre, porque si hay un actor con el mismo nombre no me tiene que dejar introducir ninguno. Y me he liado bastante en esto.

Gracias.




Código C:
Ver original
  1. for(i=0;i<MAX;i++){
  2.         pelicula[i].titulo[0]='0';
  3.         pelicula[i].director[0]='0';
  4.         pelicula[i].calificacion=0;
  5.        
  6.         for(e=0;e<5;e++){
  7.         pelicula[i].act[e].nombre[0]='0';
  8.         pelicula[i].act[e].edad=0;
  9.         pelicula[i].act[e].sexo[0]='0';
  10.         }  
  11.     }
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18. printf("\nIntroduce el titulo de la pelicula para el actor: ");
  19.         fflush(stdin);
  20.         gets(peli);
  21.  
  22.         introduciract(pelicula, peli);
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29. void introduciract(struct peliculas *pelicula, char peli[]){
  30.     int i, e, y;
  31.     char nom[20];
  32.  
  33.  
  34.  
  35.  
  36.  
  37.     for(i=0;i<MAX;i++){
  38.  
  39.         if(strcmp(pelicula[i].titulo,peli)==0){
  40.  
  41.             printf("\nHAS ENTRADO EN PELI %d", i);
  42.  
  43.             for(e=0;e<5;e++){
  44.                
  45.  
  46.                 if(pelicula[i].act[e].edad==0){
  47.                    
  48.                     printf("\nPELI %d, ACTOR %d", i, e);
  49.                     printf("\n %d", pelicula[i].act[e].edad);
  50.  
  51.  
  52.                     printf("\nNombre del actor: ");
  53.                     fflush(stdin);
  54.                     gets(nom);
  55.  
  56.                    
  57.                         while(strcmp(pelicula[i].act[y].nombre,nom)==0){
  58.                                
  59.                             printf("\nACTOR %d REPEtIDO", y);
  60.                    
  61.  
  62.                         printf("\nVARIABLE Y: %d", y);
  63.  
  64.                         strcpy(pelicula[i].act[y].nombre,nom);
  65.  
  66.                         printf("\nEdad del actor: ");
  67.                         fflush(stdin);
  68.                         scanf("%d", &pelicula[i].act[y].edad);
  69.  
  70.                         printf("\nSexo del actor: ");
  71.                         fflush(stdin);
  72.                         gets(pelicula[i].act[y].sexo);
  73.                         }
  74.                 }
  75.                                
  76.             }
  77.         }
  78. }
  79.  
  80. }
  #2 (permalink)  
Antiguo 18/05/2015, 01:30
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: ¿Como controlar esta excepcion en C?

Cita:
Iniciado por IVICP3 Ver Mensaje
Tengo que mirar en todos los actores de la estructura si hay un actor con el mismo nombre, porque si hay un actor con el mismo nombre no me tiene que dejar introducir ninguno. Y me he liado bastante en esto.
¿No te tiene que dejar introducir ninguno? Yo esperaría que, ante un duplicado, eliminase el duplicado y siguiera pidiendo actores. Esto lo podrías conseguir decrementando el valor de "y"... o "e". ¿Por qué usas las dos variables para acceder al array de actores? Entre otras cosas, "y" no está inicializada, por lo que lo más seguro es que acabes accediendo a memoria no válida (recuerda que las variables no inicializadas tienen basura, lo que viene a ser valores aleatorios).

Un saludo.

Etiquetas: char, controlar, excepcion, funcion, int, programa, struct
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:16.