C/Visual C - pk pasa esto al usar cin.getline?

 
Vista:

pk pasa esto al usar cin.getline?

Publicado por jose morales (16 intervenciones) el 24/07/2005 00:45:01
hola lo ke pasa eske estoy haciendo un programa y adecunta ke kiero ke el usuario ponga el total de letras de su nombre y luego hago un array dinamico a partir de ese numero par aluego utilizar cin.getline, pero lo ke pasa eske kuando pongo l numero me manda directamente el mensaje, aqui esta el programa para ke vean, si alguien sabe porke pasa eso o ke onda, diganme porfas, gracias!!
#include <iostream.h>
#include <string.h>

int main(){
int num;
cout<<"Escribe el largo de tu nombre ";
cin>>num;

char *nombre=new char[num];
cin.getline(nombre,num);
cout<<"Que tal "<<nombre;
return 0;
}

Si pogno por ejemplo el numero 30 y doy enter me aparece:
"Que tal"

Pero si pongo 30 y luego mi nombre seguido jose eduardo morales morales
y me dice
Que tal jose eduardo morales morales

pero no es como yo kiero ya ke kiero opner primero 30 y luego enter y leugo ya mi nombrey neter y ke apraezca el mensaje pero no pasa :S

Ayuda pls
gracias!
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:pk pasa esto al usar cin.getline?

Publicado por El Mogur (202 intervenciones) el 24/07/2005 13:38:06
Lo primero s q result krioso q skribas mejor en C q n kristiano. Qiero dcir q n t kodigo pons " cout<<"Que tal " " kuando no has puesto ni una "q" en tu pregunta, haciendo sta kasi imposible de leer... ¿S q qieres que el kmputador parezca + inteligente q l humano?

Un poquito de orden, por favor, que estamos aqui para resolver dudas, no para descifrar el "español" de la gente que no tiene ganas de escribir bien...

Y contestando a tu pregunta, el problema es el siguiente:

Cuando tu programa ejecuta el cin > > num; lo que hace es leer los caracteres que vas metiendo por teclado, hasta que lo que escribes un INTRO. En ese momento, empieza a procesar la entrada, hasta que esta deja de ser un número válido. Es decir, tu llegas y escribes "30[INTRO]", y en ese momento el cin empieza a procesar... Y resulta que lee el '3' y dice "vale", lee el '0' y dice "vale, de momento ha puesto un 30", lee el '[INTRO]' y dice "ups, ya esto no es un número, así que yo no lo quiero _así que lo dejo para el siguiente que quiera leer de la entrada_". Es decir, aunque el cin > > num; se queda esperando hasta que el usuario pulsa el INTRO, después ese INTRO _lo deja para el siguiente_.

Cuando el programa llega al getline, en el buffer de entrada, sigue quedando ese INTRO que tú has metido en "30[INTRO]", y el getline lo lee y se queda tan ancho, sin esperar a que hagas nada más.

El otro caso que pones también tiene sentido: si tu pones "30 mi nombre[INTRO]", la instruccion que lee el numero empieza con el '3', después con el '0', y cuando llega al espacio para, porque ya no es un número válido... Cuando el getline se empieza a ejecutar, el buffer de entrada tiene " mi nombre[INTRO]", así que lee hasta el [INTRO] (incluido), y termina. Y apostaría que cuando te sale el mensaje "Que tal...", hay dos espacios antes de tu nombre, el primero el que has puesto en el código, y el segundo el que has metido entre la longitud y el nombre.

Saludos.

P.D.: Ten cuidado, porque en el new deberías reservar otro espacio más para el carácter fin de linea...
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:qué es cin.getline?

Publicado por Omar (1 intervención) el 31/10/2005 01:54:23
HOLA, solo quería saber si alguien puede explicarme lo que es, o lo que hace la función de cin.getline y también si podrían explicarme que diferencia hay entre un archivo C y uno CPP cuando los iniciamos en Turbo C++ de Borland
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:pk pasa esto al usar cin.getline?

Publicado por El Mogur (202 intervenciones) el 24/07/2005 13:39:56
Por cierto, que no lo he dicho; para que el programa haga lo que quieres, basta con que pongas un getline justo después del cin > > num, para que quite ese "INTRO" que has dado después del número.

Saludos.
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:pk pasa esto al usar cin.getline?

Publicado por jose morales (16 intervenciones) el 24/07/2005 20:49:15
Ah Muchas gracias!! gracias por dericme bien k onda con esteo!! hehe y si voya mejorra el españo hahahah, gracias!!!! Te la debo
Saludos!!
jose morales
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