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

Error en estructura(no semiclon at end of struct)

Estas en el tema de Error en estructura(no semiclon at end of struct) en el foro de C/C++ en Foros del Web. He hecho un programa con estructuras que me pide ciertos datos sobre la cantidad de alumnos que desee ingresar. Pero ahora tengo el siguiente problema, ...
  #1 (permalink)  
Antiguo 04/07/2010, 11:14
Avatar de Mercality  
Fecha de Ingreso: junio-2010
Mensajes: 19
Antigüedad: 13 años, 9 meses
Puntos: 0
Error en estructura(no semiclon at end of struct)

He hecho un programa con estructuras que me pide ciertos datos sobre la cantidad de alumnos que desee ingresar.

Pero ahora tengo el siguiente problema, he terminado el programa, y cuando voy a compilar, pues corrijo los errores habituales, que si parentesis que si & que si ; pero bueno, ahora me encuentro con esta serie de problemas.
Código:
C:\Users\Mercality\Documents\Algoritmos cpp\structs.c:11: warning: no semicolon at end of struct or union

C:\Users\Mercality\Documents\Algoritmos cpp\structs.c:11: error: syntax error before '=' token

C:\Users\Mercality\Documents\Algoritmos cpp\structs.c:14: error: syntax error before '}' token

C:\Users\Mercality\Documents\Algoritmos cpp\structs.c:17: warning: no semicolon at end of struct or union

C:\Users\Mercality\Documents\Algoritmos cpp\structs.c:17: error: syntax error before '=' token

C:\Users\Mercality\Documents\Algoritmos cpp\structs.c:21: error: syntax error before '}' token

C:\Users\Mercality\Documents\Algoritmos cpp\structs.c:29: error: field `sex' has incomplete type

C:\Users\Mercality\Documents\Algoritmos cpp\structs.c:30: error: field `espe' has incomplete type

C:\Users\Mercality\Documents\Algoritmos cpp\structs.c: In function `main':

C:\Users\Mercality\Documents\Algoritmos cpp\structs.c:63: error: case label not within a switch statement

C:\Users\Mercality\Documents\Algoritmos cpp\structs.c:83: error: case label not within a switch statement

C:\Users\Mercality\Documents\Algoritmos cpp\structs.c:88: error: case label not within a switch statement

C:\Users\Mercality\Documents\Algoritmos cpp\structs.c:110: error: syntax error at end of input

Ejecución Terminada
Me imagino que los errores en los CASE se originan a partir de los errores en sexo y especialidad.
Me podrían decir en que estoy fallando?
Aqui mi codigo.
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.        struct fecha {
  5.               int dia;
  6.               int mes;
  7.               int anio;
  8.               };
  9.        struct sexo {
  10.               int op;
  11.               char masculino[] = "Masculino";
  12.               char femenino[] = "Femenino";
  13.               char sexoa[10];
  14.               };
  15.        struct especialidad {
  16.               int opc;
  17.               char inf[] = "Informatica";
  18.               char adm[] = "Administracion";
  19.               char agr[] = "Agroalimentaria";
  20.               char esp[15];
  21.               };
  22.        struct alumno {
  23.               long cedula;
  24.               char nombre[40];
  25.               char apellido[40];
  26.               char direccion[100];
  27.               int telefono;
  28.               struct fecha fecha_nac;
  29.               struct sexo sex;
  30.               struct especialidad espe;
  31.               float prom;
  32.               char ciudadn[50];
  33.               char estadon[50];
  34.               };
  35.        struct alumno alumnos[100];
  36.        
  37.        main() {
  38.               int i,n;
  39.               system("CLS");
  40.               printf("Introduzca el numero de alumnos a almacenar:");
  41.               scanf("%d",&n);
  42.              
  43.               for (i=0; i<n; i++) {
  44.                   printf("\nDatos del alumno #%d\n", i+1);
  45.                   printf("Cedula: ");
  46.                   scanf("%ld",&alumnos[i].cedula);
  47.                   printf("Nombre: ");
  48.                   scanf("%s",&alumnos[i].nombre);
  49.                   printf("Apellido: ");
  50.                   scanf("%s",&alumnos[i].apellido);
  51.                   printf("Direccion: ");
  52.                   gets(alumnos[i].direccion);
  53.                   printf("Telefono: ");
  54.                   scanf("%d",&alumnos[i].telefono);
  55.                   printf("Sexo:\n");
  56.                   printf("1.)Masculino\n2.)Femenino");
  57.                   scanf("%d",&alumnos[i].sex.op);
  58.                   switch (alumnos[i].sex.op)
  59.                   case 1:{
  60.                        strcpy(alumnos[i].sex.sexoa,alumnos[i].sex.masc);
  61.                        }
  62.                        break;
  63.                   case 2:{
  64.                        strcpy(alumnos[i].sex.sexoa,alumnos[i].sex.fem);
  65.                        }
  66.                        break;
  67.                   printf("Fecha de nacimiento:\n");
  68.                   printf("Dia: ");
  69.                   scanf("%d",&alumnos[i].fecha_nac.dia);
  70.                   printf("Mes: ");
  71.                   scanf("%d",&alumnos[i].fecha_nac.mes);
  72.                   printf("Anio: ");
  73.                   scanf("%d",&alumnos[i].fecha_nac.anio);
  74.                   printf("Especialidad:\n");
  75.                   printf("1.)Informatica\n2.)Administracion\n3.)Agroalimentaria");
  76.                   scanf("%d",&alumnos[i].espe.opc);
  77.                   switch (alumnos[i].espe.opc)
  78.                   case 1:{
  79.                        strcpy(alumnos[i].espe.esp,alumnos[i].espe.inf);
  80.                   }
  81.                        break;
  82.                   case 2:{
  83.                        strcpy(alumnos[i].espe.esp,alumnos[i].espe.adm);
  84.                        break;
  85.                   }
  86.                   case 3:{
  87.                        strcpy(alumnos[i].espe.esp,alumnos[i].espe.agr);
  88.                   }
  89.                        break;
  90.                   printf("Promedio: ");
  91.                   scanf("%f",&alumnos[i].prom);
  92.                   printf("Ciudad de nacimiento: ");
  93.                   gets(alumnos[i].ciudadn);
  94.                   printf("Estado de nacimiento: ");
  95.                   gets(alumnos[i].estadon);
  96.                   printf("\nDatos Almacenados\n");
  97.                  
  98.                     for (i=0; i<n; i++) {
  99.                       printf("Cedula: %ld\nNombre: %s\nApellido: %s\n",alumnos[i].cedula,alumnos[i].nombre,alumnos[i].apellido);
  100.                       printf("Direccion: %s\nTelefono:%d\n",alumnos[i].direccion,alumnos[i].telefono);
  101.                       printf("Sexo: %s\n",alumnos[i].sex.sexoa);
  102.                       printf("Fecha de nacimiento: %d/%d/%d\n",alumnos[i].fecha_nac.dia,alumnos[i].fecha_nac.mes,alumnos[i].fecha_nac.anio);
  103.                       printf("Especialidad: %s\nPromedio: %f\n",alumnos[i].espe.esp,alumnos[i].prom);
  104.                       printf("Ciudad de nacimiento: %s\nEstado de nacimiento: %s",alumnos[i].ciudadn,alumnos[i].estadon);
  105.                       }
  106.                       system("PAUSE");
  107.        
  108. }
  #2 (permalink)  
Antiguo 04/07/2010, 12:46
 
Fecha de Ingreso: junio-2010
Mensajes: 22
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Error en estructura(no semiclon at end of struct)

El problema es que estas "inicializando" tus arreglos de caracteres.

Una estructura solo define un tipo de dato, hasta que la creas, puedes asignar valores.

Cambia en tus estructuras de:

Código:
char masculino[] = "Masculino";
a
Código:
char masculino[10];
Y ya que tengas la variable inicializada, asignale el dato:

Código:
strcpy(sexo.masculino, "Masculino");
Aunque si son constantes podrias saignar algunos #define o poner los string directo en el codigo.
  #3 (permalink)  
Antiguo 04/07/2010, 13:55
Avatar de Mercality  
Fecha de Ingreso: junio-2010
Mensajes: 19
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Error en estructura(no semiclon at end of struct)

Bien, Ya resolví ese problema, pero me sigue dando este error

90 C:\Users\Mercality\Documents\Algoritmos cpp\structs.c case label not within a switch statement. No entiendo ya que segun veo los switch estan bien colocados.
  #4 (permalink)  
Antiguo 04/07/2010, 14:12
Avatar de Mercality  
Fecha de Ingreso: junio-2010
Mensajes: 19
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Error en estructura(no semiclon at end of struct)

Ya solucione el problema de los CASe tambien. Pero ahora me da este error. Es lo unico que esta molestando S:
108 C:\Users\Mercality\Documents\Algoritmos cpp\structs.c syntax error at end of input

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.        struct fecha {
  5.               int dia;
  6.               int mes;
  7.               int anio;
  8.               };
  9.        struct sexo {
  10.               int op;
  11.               char masculino[10];
  12.               char femenino[10];
  13.               char sexoa[20];
  14.               };
  15.        struct especialidad {
  16.               int opc;
  17.               char inf[20];
  18.               char adm[20];
  19.               char agr[20];
  20.               char esp[20];
  21.               };
  22.        struct alumno {
  23.               long cedula;
  24.               char nombre[40];
  25.               char apellido[40];
  26.               char direccion[100];
  27.               int telefono;
  28.               struct fecha fecha_nac;
  29.               struct sexo sex;
  30.               struct especialidad espe;
  31.               float prom;
  32.               char ciudadn[50];
  33.               char estadon[50];
  34.               };
  35.        struct alumno alumnos[100];
  36.        
  37.        main() {
  38.               int i,n;
  39.               system("CLS");
  40.               printf("Introduzca el numero de alumnos a almacenar:");
  41.               scanf("%d",&n);
  42.               strcpy(alumnos[i].sex.masculino,"Masculino");
  43.               strcopy(alumnos[i].sex.femenino,"Femenino");
  44.               strcopy(alumnos[i].espe.inf,"Informatica");
  45.               strcopy(alumnos[i].espe.adm,"Admnistracion");
  46.               strcopy(alumnos[i].espe.agr,"Agroalimentacion");
  47.               for (i=0; i<n; i++) {
  48.                   printf("\nDatos del alumno #%d\n", i+1);
  49.                   printf("Cedula: ");
  50.                   scanf("%ld",&alumnos[i].cedula);
  51.                   printf("Nombre: ");
  52.                   scanf("%s",&alumnos[i].nombre);
  53.                   printf("Apellido: ");
  54.                   scanf("%s",&alumnos[i].apellido);
  55.                   printf("Direccion: ");
  56.                   gets(alumnos[i].direccion);
  57.                   printf("Telefono: ");
  58.                   scanf("%d",&alumnos[i].telefono);
  59.                   printf("Sexo:\n");
  60.                   printf("1.)Masculino\n2.)Femenino");
  61.                   scanf("%d",&alumnos[i].sex.op);
  62.                   switch (alumnos[i].sex.op) {
  63.                   case 1:
  64.                        strcpy(alumnos[i].sex.sexoa,alumnos[i].sex.masculino);        
  65.                        break;
  66.                   case 2:
  67.                        strcpy(alumnos[i].sex.sexoa,alumnos[i].sex.femenino);
  68.                        break; }
  69.                   printf("Fecha de nacimiento:\n");
  70.                   printf("Dia: ");
  71.                   scanf("%d",&alumnos[i].fecha_nac.dia);
  72.                   printf("Mes: ");
  73.                   scanf("%d",&alumnos[i].fecha_nac.mes);
  74.                   printf("Anio: ");
  75.                   scanf("%d",&alumnos[i].fecha_nac.anio);
  76.                   printf("Especialidad:\n");
  77.                   printf("1.)Informatica\n2.)Administracion\n3.)Agroalimentaria");
  78.                   scanf("%d",&alumnos[i].espe.opc);
  79.                   switch (alumnos[i].espe.opc) {
  80.                   case 1:
  81.                        strcpy(alumnos[i].espe.esp,alumnos[i].espe.inf);                  
  82.                        break;
  83.                   case 2:
  84.                        strcpy(alumnos[i].espe.esp,alumnos[i].espe.adm);
  85.                        break;                  
  86.                   case 3:
  87.                      strcpy(alumnos[i].espe.esp,alumnos[i].espe.agr);              
  88.                        break;
  89.                        }
  90.                   printf("Promedio: ");
  91.                   scanf("%f",&alumnos[i].prom);
  92.                   printf("Ciudad de nacimiento: ");
  93.                   gets(alumnos[i].ciudadn);
  94.                   printf("Estado de nacimiento: ");
  95.                   gets(alumnos[i].estadon);
  96.                   printf("\nDatos Almacenados\n");
  97.                  
  98.                     for (i=0; i<n; i++) {
  99.                       printf("Cedula: %ld\nNombre: %s\nApellido: %s\n",alumnos[i].cedula,alumnos[i].nombre,alumnos[i].apellido);
  100.                       printf("Direccion: %s\nTelefono:%d\n",alumnos[i].direccion,alumnos[i].telefono);
  101.                       printf("Sexo: %s\n",alumnos[i].sex.sexoa);
  102.                       printf("Fecha de nacimiento: %d/%d/%d\n",alumnos[i].fecha_nac.dia,alumnos[i].fecha_nac.mes,alumnos[i].fecha_nac.anio);
  103.                       printf("Especialidad: %s\nPromedio: %f\n",alumnos[i].espe.esp,alumnos[i].prom);
  104.                       printf("Ciudad de nacimiento: %s\nEstado de nacimiento: %s",alumnos[i].ciudadn,alumnos[i].estadon);
  105.                       }
  106.                       system("PAUSE");
  107.                      
  108. }
  #5 (permalink)  
Antiguo 04/07/2010, 14:59
 
Fecha de Ingreso: junio-2010
Mensajes: 22
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Error en estructura(no semiclon at end of struct)

Los case tambien llevan { y }
Código:
switch (alumnos[i].sex.op) 
{
                  case 1:
                  {
                       strcpy(alumnos[i].sex.sexoa,alumnos[i].sex.masculino);     
                       break;
                  }
                  case 2:
                  {
                       strcpy(alumnos[i].sex.sexoa,alumnos[i].sex.femenino);
                       break; 
                  }
}
  #6 (permalink)  
Antiguo 04/07/2010, 15:15
Avatar de Mercality  
Fecha de Ingreso: junio-2010
Mensajes: 19
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Error en estructura(no semiclon at end of struct)

Hecho y el problema persiste. Si lo pudieras probar en tu maquina y decirme si corre. Me sacaría de la duda que es error del compilador, o del IDE. No se...
  #7 (permalink)  
Antiguo 04/07/2010, 15:27
 
Fecha de Ingreso: junio-2010
Mensajes: 22
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Error en estructura(no semiclon at end of struct)

Listo, de las lineas 43 a 46, es strcpy no strcopy.

Me dice que falta un corchete al final, pero no si se fue por que te falto al copiar el codigo.

Si vuelve a fallar, por fa, incluye el error que arroja el compilador.
  #8 (permalink)  
Antiguo 04/07/2010, 15:34
Avatar de Mercality  
Fecha de Ingreso: junio-2010
Mensajes: 19
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Error en estructura(no semiclon at end of struct)

Lo de los strcpy lo acomodé pero no es eso. Sigue dando el error. Y todos los corchetes estan bien S:
  #9 (permalink)  
Antiguo 04/07/2010, 15:37
 
Fecha de Ingreso: junio-2010
Mensajes: 22
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Error en estructura(no semiclon at end of struct)

Que error sale?
  #10 (permalink)  
Antiguo 04/07/2010, 15:43
Avatar de Mercality  
Fecha de Ingreso: junio-2010
Mensajes: 19
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Error en estructura(no semiclon at end of struct)

Si, faltaba una llave, el archivo se ejecuta, pero cuando introduzco el numero de personas a almacenar, se sale y da reporte de error de windows. Un amigo lo corrió y el error le da es al pedir la direccion.
  #11 (permalink)  
Antiguo 04/07/2010, 15:51
 
Fecha de Ingreso: junio-2010
Mensajes: 22
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Error en estructura(no semiclon at end of struct)

Usa scanf en lugar de gets al momento de leer.

O por que usas gets? A mi me manda un warning al usar gets, y es con el linker.

Código:
test.cpp:(.text+0x1f3): warning: the `gets' function is dangerous and should not be used.
  #12 (permalink)  
Antiguo 04/07/2010, 19:56
Avatar de Mercality  
Fecha de Ingreso: junio-2010
Mensajes: 19
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Error en estructura(no semiclon at end of struct)

El problema del scanf es que no me deja leer con espacios. Por ejemplo para escribir la direccion: Urbanizacion Valles de Saron. Solo lee urbanizacion, tengo otro algoritmo con gets y si me lee con espacios.
  #13 (permalink)  
Antiguo 05/07/2010, 18:39
 
Fecha de Ingreso: junio-2010
Mensajes: 22
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Error en estructura(no semiclon at end of struct)

Usa fgets.

Código:
       char *fgets(char *s, int size, FILE *stream);
Es mas segura y no deberia de darte problemas

Etiquetas: end
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 05:40.