[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