C/Visual C - Capturar linea por consola

 
Vista:

Capturar linea por consola

Publicado por Tino (7 intervenciones) el 03/03/2007 04:27:33
La duda mia es la siguiente, tengo este codigo:
...........
scanf("%d",&v);
char ** p;
int a;
scanf("%d",&a);
p = new char*[a];
for(i = 0; i < a; i++)
{
p[i] = new char[21];
gets(p[i]);
}

Supuestamente esto deberia capturar una cantidad de lineas igual al numero que me entren, pero al correr esto la primera vez que se ejecuta el gets(p[i]); no captura nada o mejor dicho se ejecuta sin haber yo entrado nada por consola y deja en blanco la posicion 0 del arreglo. Alguien me puede decir a que se debe esto?? Como se puede solucionar?? Existe alguna otra funcion que me permita capturar una linea completa por consola??

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Capturar linea por consola

Publicado por Nacho Cabanes (12 intervenciones) el 06/03/2007 01:03:53
Cuando usas scanf("%d", ....) estás leyendo un entero, pero tu pulsas Intro al terminar.

Esa pulsación de "Intro" queda en el buffer del teclado, y es lo que lee tu gets, por lo que el primer valor que te devuelve es una cadena vacía.

Hay varias formas de solucionarlo. Por ejemplo:

- Leer el número con scanf("%d%c", &v); para que ese %c "se coma" el salto de línea.

- Una forma más legible pero equivalente sería scanf("%d%c", &v); getchar();

- También puedes leer el número como cadena con "gets" y luego extraer su valor numérico con "atoi" o con "sprintf".

¡Suerte con ello!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Capturar linea por consola

Publicado por Tino (7 intervenciones) el 06/03/2007 06:41:57
Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar