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.