Respuesta: Codigo con errores. Gracias Munire ciertamente compila pero no acaba de dar resultados deseados, de momento la función que quiero perfilar es la de alta de peliculas, y veo que el filtro que detecta la repetición de un titulo no funciona,
while( i < *nextEntry ) {
printf(" Comparacion '%s' to '%s'\n", titulo, cine[i].titulo );
if( strcmp( cine[i].titulo, titulo ) == 0 ) {
printf("error, film ya esta en la lista.\n");
aparte de que en la primera ejecucion arroja "titulo:dia: luego a la siguiente pelicula ya sale por separado los campos, titulo: dia: , al menos ha sido un avance que ya compile, aunque creo que hay código que quizá no está debidamente escrito, la verdad que es prestado.
#include <stdio.h>
#include <string.h>
/* enumerados,struct,typedef */
typedef enum generoFilm{
comedia,
drama,
terror,
belica,
otros
}miGenero;
typedef struct cine {
char titulo[40];
enum generoFilm miGenero;
int miDia;
int miMes;
int miHora;
int miAgno;
}tipocine;
char *prompts[5] = {
"Alta de pelicula", "Vender entradas",
"Listado de peliculas", "Mostrar calendario de peliculas",
"Salir" };
/* funciones */
void alta_Pelicula(tipocine *cine,int *);
void vender_Ticket(int tickets){
char bufer[80];
printf("Titulo de pelicula: ");
fgets(bufer,sizeof(bufer),stdin);
printf("numero de tickets: ");
scanf("%d",&tickets);
};
void listado_Peliculas(){
char bufer[80];
printf("Genero de pelicula: ");
fgets(bufer,sizeof(bufer),stdin);
}
/* funciones*/
int main(){
char espacios[40];
int i,j, tickets=0, nexEntry=0;
char option;
tipocine cines[30];
printf( " GESTION PELICULAS\n" );
printf( " ========================\n" );
for( j=0; j<5; j++ )
{
printf( prompts[j] );
for ( i = 0; i < 35 - strlen(prompts[j]); i++ )
{
espacios[i] = ' ';
}
espacios[i]='\0';
printf( "%s<Pulsar %c>\n",espacios , prompts[j][0] );
}
printf(" =========================\n");
printf(" INTRODUZCA UNA OPCION VALIDA A|V|L|M|S\n");
scanf("%c",&option);
while ((option!='A')&&(option!='V')&&(option!='L')&&(opt ion!='M')&&(option!='S'))printf("error opcion no valida");
switch(option){
case 'A': alta_Pelicula(cines, &nexEntry);
break;
case 'V': vender_Ticket(tickets);
break;
default: return 0;
break;}
nexEntry = 0;
while( nexEntry < 30 )
{
alta_Pelicula( cines, &nexEntry);
nexEntry++;
}
return 0;
};
void alta_Pelicula( tipocine *cine, int *nextEntry ){
char bufer[80];
char titulo[40];
char *p;
enum generoFilm miGenero;
int miDia;
int miMes;
int miHora;
int miAgno;
int i;
printf("\n=== Alta Pelicula ===\n");
printf( " proxima pelicula : %d\n", *nextEntry );
if( *nextEntry == 30 )
{
printf("error, no se admiten más peliculas.\n");
return;
}
else{
printf("Titulo: ");
fgets( bufer, sizeof(bufer), stdin );
printf("Dia: ");scanf("%d",&miDia);
printf("Mes: ");scanf("%d",&miMes);
printf("Anno: ");scanf("%d",&miAgno);
printf("Hora: ");scanf("%d",&miHora);
printf("Genero: ");fgets(bufer,sizeof(bufer),stdin);
}
i = 0;
p = bufer;
while( *p != '\n' && i<sizeof(titulo) ) {
titulo[i++] = *p++;
}
titulo[i] = '\0';
i=0;
while( i < *nextEntry ) {
printf(" Comparacion '%s' to '%s'\n", titulo, cine[i].titulo );
if( strcmp( cine[i].titulo, titulo ) == 0 ) {
printf("error, film ya esta en la lista.\n");
return;
}else {
printf("Day: ");
scanf("%d",&miDia);}
i++;
}
strcpy( cine[*nextEntry].titulo, titulo );
printf( " Added: %s\n", cine[*nextEntry].titulo );
*nextEntry = *nextEntry+1;
printf( " incrementada entrada del array: %d\n\n", *nextEntry);
}
Este es el código ya corregido por ti, el menú lo imprime bien y la opcion cuando no es valída(A o V o L o M o S) no la detecta tampoco se queda paralizado el programilla y luego emite un bucle infinito de error opcionnovalida error opcionnovalida error .................,interesante aporte Munire. |