Foros del Web » Programación para mayores de 30 ;) » Programación General »

memoria dinamica

Estas en el tema de memoria dinamica en el foro de Programación General en Foros del Web. tengo el siguiente código: #include<stdio.h> #include<conio.h> struct persona{ int clave; char nombre[30]; }; main(){ persona *alumnos; int c,n; clrscr(); printf("\n cuantos alumnos deseas capturar: "); ...
  #1 (permalink)  
Antiguo 22/06/2005, 13:45
Avatar de dexter_x740  
Fecha de Ingreso: julio-2003
Ubicación: cd. obregon, Sonora
Mensajes: 246
Antigüedad: 20 años, 9 meses
Puntos: 1
memoria dinamica

tengo el siguiente código:

#include<stdio.h>
#include<conio.h>
struct persona{
int clave;
char nombre[30];
};
main(){
persona *alumnos;
int c,n;
clrscr();
printf("\n cuantos alumnos deseas capturar: ");
scanf("%d",&n);
alumnos=new persona[n];
for(c=1;c<=n;c++){
printf("\n clave del alumno %d: ",c);
scanf("%d",&alumnos[c-1].clave);
printf("\n nombre del alumno %d: ");
gets(alumnos[c-1].nombre)
}
getche();
return 0;
}

lo que trato de hacer es crear memoria dinamica para generar un array del tipo 'persona' que definí con struct cuyo numero de elementos se captura en la variable 'n' para luego crear el array con ese numero de elementos con el constructor NEW, pero me marca error diciendo que esta mal utilizada la definicion del tipo 'persona', ¿alguien sabe ke hago mal?
__________________
[D3X73®]
  #2 (permalink)  
Antiguo 22/06/2005, 13:53
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
En ese codigo en particular te falta un ; en gets(alumnos[c-1].nombre).
¿Que compilador estas usando? Porque eso en C++, obviando el ; que falta, compila perfectamente.

Por cierto, new es un operador y no un constructor.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 22/06/2005, 17:22
Avatar de dexter_x740  
Fecha de Ingreso: julio-2003
Ubicación: cd. obregon, Sonora
Mensajes: 246
Antigüedad: 20 años, 9 meses
Puntos: 1
ah lo del ; es porke lo escribi el codigo aki en el kuadro de texto no lo kopie del editor de c++, seguro que compila bien?
__________________
[D3X73®]
  #4 (permalink)  
Antiguo 22/06/2005, 21:36
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
Cita:
Iniciado por dexter_x740
ah lo del ; es porke lo escribi el codigo aki en el kuadro de texto no lo kopie del editor de c++, seguro que compila bien?
no lo compile ni nada, pero segun yo, falta que le pongas el int al main
int main()....
  #5 (permalink)  
Antiguo 23/06/2005, 00:02
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Dos pasos para compilarlo:

Meter el codigo en un archivo .CPP (con el ; agregado y comentado clrscr que no es standard)
cl archivo.cpp

Compila perfectamente.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #6 (permalink)  
Antiguo 23/06/2005, 00:30
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Lo unico que se me ocurre es que lo estes compilando en un archivo .C o con un modificador que intente compilarlo en C, entonces deberias definir la estructura asi:

Código:
typedef struct PERSONA
{
  int clave;
  char nombre[30];
}persona;
En cuanto a new, si estas trabajando con C deberias usar malloc y free.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 24/06/2005, 20:09
Avatar de dexter_x740  
Fecha de Ingreso: julio-2003
Ubicación: cd. obregon, Sonora
Mensajes: 246
Antigüedad: 20 años, 9 meses
Puntos: 1
ya corregi los errores lo uniko ke si no entiendo eske el gets me lo ignora, se pasa a pedir la clave del otro alumno, tuve ke usar un scanf pero lo ke no me gusta del scanf para guardar cadenas de texto esque el nombre no puede llevar espacios, si enkuentra un espacio, hasta ese punto almacena la cadena de texto.
__________________
[D3X73®]
  #8 (permalink)  
Antiguo 25/06/2005, 11:10
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
gets te lo ignora?
Esta raro.
De todas maneras hay una forma para scanf te lea tambien los espacios. Solo que no recuerdo ahorita como se hace eso.

Saludos
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 04:28.