Problema con gets()

Andolini
17 de Diciembre del 2002
Uuula :)

Tengo un problema que creo q es muy tipico pero yo no tengo ni idea de como arreglarlo. Explico: estoy dentro de un bucle for y ... bueno, pego el trozito de codigo y comento el error:

...

for (i=0;i<max_alum;i++) {
printf("Introduce nombre del alumno %d: ",i+1);
punt = gets(nombres[i]);
if (punt == NULL) { i--; break; };

...

tengo el array nombres, y el puntero, ambos tipo char y la variable i entera, etc. El problema que tengo es que la primera vez que se hace el "for" funciona perfectamente pero al repetirlo la segunda se salta el gets() por arte de magia. He probado cambiarlo por scanf() y no salta pero no me sirve la funcion scanf() para lo q quiero hacer. Alguien me echa una mano? por favor.

Un saludo,
Andolini.

webJose
17 de Diciembre del 2002
La funci贸n gets() no reserva memoria. Pregunta: Usted ya reserv贸 memoria para cada entrada del vector? Tambi茅n, no s茅 c贸mo defini贸 usted el vector, pero creo que est谩 siendo usado mal.

Si pone el resto del c贸digo es mejor diagnosticar. Yo lo har铆a as铆:

#define MAX_ALUMNOS 25
#define MAX_NOMBRE 50

char** vNombres[MAX_ALUMNOS];

for (i=0;i<MAX_ALUMNOS;i++) {
//Reservar memoria
*vNombres[i] = new char[MAX_NOMBRE];
printf("Introduce nombre del alumno %d: ",i+1);
if (gets(*vNombres[i])){i--; break; };

Como ve, el accesar cada nombre del vector requiere un nivel de indirecci贸n (*), puesto que un vector de strings es un vector de un vector de chars.

Andolini
17 de Diciembre del 2002
No es ese el problema, el array estaba bien definido y con la memoria reservada, ya tengo solucionado el problema. Gracias de todas formas :)

Por si quieres saberlo lo he arreglado volviendo a pedir el gets a partir de la segunda vez y asi me lo pide solo una, es un arreglo malo, pero al fin y al cabo, funciona :)

Un saludo,
Andolini.