[C con Clase] AYUDA URGENTE TEATRO
Steven Davidson
srd4121 en njit.edu
Mie Nov 2 10:54:10 CET 2011
Hola Nicolás,
2011/11/2 Nicolas Ayala <nicoayala10 en hotmail.com>:
> hola.tengo un problema me dice q : linea 95 error decalracio syntax
> linea 259 declaracin
> missing ;
> linea 259 compound
> statement mising }
>
> QUERIA AYUDA POR FAVOR ES UN TRABAJO Q TENGO Q ENTREGAR PARA EL DIA 2/11/11
> Y ME FALTA LA FUNCION DE RECUPERAR Y SALVAR,COMO SE HACE O ALGUIEN Q ME
> AYUDE SALUDOS Y GRACIAS
>
Mirando los errores que me arroja el compilador, las soluciones son
las siguientes:
- En la implementación de 'iniciarteatro()', se te ha olvidado el
cierre de llave para la función; esto es,
void iniciarteatro( _nodo teatro[FILAS][COLUMNAS] )
{
...
}
- En 'venderasiento()', has escrito su comienzo así:
void venderasiento(_nodo teatro[FILAS][COLUMNAS])
{
int ifila,icolumna;
char ubicacion,estadovendido='V',estadoreservado='R';
long telreserva;
mostrarasientos();
...
}
Sin embargo, la función 'mostrarasientos()' requiere un parámetro que
viendo su prototipo y por lógica, debería ser así:
void venderasiento(_nodo teatro[FILAS][COLUMNAS])
{
int ifila,icolumna;
char ubicacion,estadovendido='V',estadoreservado='R';
long telreserva;
mostrarasientos( teatro );
...
}
- Luego escribes la siguiente sentencia 'if':
if( estadovendido==teatro[ifila][icolumna]->estado )
El elemento 'teatro[ifila][icolumna]' es una estructura y no un
puntero a una estructura, por lo que el operador correcto es el punto;
esto es,
if( estadovendido == teatro[ifila][icolumna].estado )
También cometes el mismo error otras tres veces en esta misma función.
- Posteriormente, escribes la siguiente sentencia bajo el tercer 'if':
scanf( "%l", &telreserva );
El especificador correcto para indicar un 'long int' es %ld, así que
la sentencia correcta es:
scanf( "%ld", &telreserva );
- Casi al final del bucle 'do/while' escribes esta asignación:
ubicacion = "L";
La variable 'ubicacion' es de tipo 'char' y no un array de 'char'. Por
lo tanto, para indicar un carácter se usan las comillas singulares;
esto es,
ubicacion = 'L';
- Asimismo, la condición del bucle 'do/while' deberá ser corregida así,
do
{
...
} while( ubicacion != 'L' );
- Tienes otro error de emparejamiento de llaves. Tienes un 'else'
fuera del bucle 'do/while' cuando el 'if' está dentro de tal bucle.
Esto es erróneo. Básicamente, tienes lo siguiente:
do
{
...
if( ... )
{ ... }
...
} while( ... );
else
{
...
}
O bien este 'else' debe estar dentro del bucle o bien el 'if' debe
estar fuera y por tanto conteniendo tal bucle.
- En 'reservarasiento()', defines e inicializas dos variables
incorrectamente; escribes,
char reservado = "R";
char vendido = "V";
Como expliqué previamente, debes usar las comillas singulares para los
caracteres literales; esto es,
char reservado = 'R';
char vendido = 'V';
- Tienes varios errores similares en esta función que los que
explicamos en la función ''venderasiento()'.
- Además, has escrito 'If' en lugar de 'if'; esto es,
if( teatro[ifila][icolumna].estado == vendido ||
teatro[ifila][icolumna].estado == reservado )
- En el bucle 'do/while' que usas, se te ha olvidado el punto y coma
al final; esto es,
do
{
...
} while( ... );
- En 'liberarasientos()', también usas incorrectamente el operador ->
cuando debería ser el operador .; esto es,
if( teatro[ifila][icolumna].estado == 'R' )
También has cometido el error de usar el operador = (de asignación) en
lugar del operador == de comparación. Nuevamente, vuelves a usar las
comillas cuando deberían ser las comillas singulares, como escribiste
en la subsiguiente asignación:
{
teatro[ifila][icolumna]->estado = "L";
teatro[ifila][icolumna]->telefono = 0;
}
cuando deberían ser,
{
teatro[ifila][icolumna].estado = 'L';
teatro[ifila][icolumna].telefono = 0;
}
- Usas la variable 'reservado', cuando ésta no fue definida. La
solución es usar 'reserva' que seguramente era la que querías usar;
esto es,
if( teatro[ifila][icolumna].estado == reserva )
- Tienes errores similares con los bucles y las cierres de llaves como
en funciones anteriores, al igual que la falta del punto y coma al
final del buicle 'do/while'. Además, usas el operador = en el bucle
'do/while' en lugar de ==. Escribes,
while( terminardo=1 )
cuando debería ser,
while( terminardo == 1 )
Espero que todo esto te sea de ayuda.
Steven
Más información sobre la lista de distribución Cconclase