• Domingo 17 de Noviembre de 2024, 14:30

Autor Tema:  Problema con la funcion Getline  (Leído 8290 veces)

niniodinho

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Problema con la funcion Getline
« en: Viernes 17 de Abril de 2009, 19:02 »
0
Hola a todos. Recién estoy empezando con C++ y la verdad que la estoy llevando bastante bien, salvo por algunos puntos.
Una pregunta que me ha surgido trabajando con variables del tipo string: La cosa es que quiero ingresar una cadena completa por teclado, por lo que el cin no me ayuda ya que corta en cada espacio, por lo que utilizo la función getline(cin,cadena), donde cadena sería una variable string. He aquí una porción de mi código:

for (int i=0;i<5;i++){
        cout<<"Ingrese el nombre del partido numero "<<i+1<<endl;
        getline(cin,ArrPartidos.nombre);
        //cin>>ArrPartidos.nombre;
        cout<<"Ingrese la cantidad de votos recibidos"<<endl;
        cin>>ArrPartidos.votos;
}

En esa porción de código, la primera vez que en entra (i=0), me deja ingresar la cadena normalmente, pero luego, cuando i=1, saltea la línea del getline, y el programa se rompe.
A qué se debe esto? No es la primera vez que me pasa.
Gracias.

Pd. La cadena de caracteres pertenece a un arreglo, cuyas celdas contienen campos de un registro.

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Problema con la funcion Getline
« Respuesta #1 en: Viernes 17 de Abril de 2009, 19:55 »
0
Me parece que estas utilizando mal la funcion getline de C++, y estas confundido un poco entre la clase string, y un arreglo de char, ya que no son lo mismo.

La funcion getline espera como primer parametro una variable de tipo char * (arreglo de char o puntero a char), no un string, y como segundo parametro, la longitud del arreglo, para no leer mas alla del final de la cadena

entonces, la utilizacion correcta de getline seria:

Código: C++
  1.  
  2. char nombre[50]
  3.  
  4. cin.getline(nombre, 50);
  5.  
  6.  

Te dejo unos enlaces para que veas la sintaxis correcta de getline, y ademas que es un string en C++, que no es lo msimo que un arreglo de char.

http://www.cplusplus.com/reference/iost ... m/getline/
http://www.cplusplus.com/reference/string/string/

Saludos :hola:

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

niniodinho

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Problema con la funcion Getline
« Respuesta #2 en: Viernes 17 de Abril de 2009, 21:46 »
0
El tema es que he visto la función getline siendo utilizada de esta forma muchísimas veces. La cuestión es que en la primera vez que pasa por ahí en el ciclo, lo hace bien, es decir me permite el ingreso y guarda bien lo que tecleo, pero de la segunda en adelante no me deja ni siquiera teclear.
Sino, utilizando el tipo string, hay otra forma de leer la cadena completa?
Gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema con la funcion Getline
« Respuesta #3 en: Viernes 17 de Abril de 2009, 22:04 »
0
Vos estas usando esta funcion:
http://www.cplusplus.com/reference/string/getline/

Ahora, depuralo o deja una version compilable con la minima expresion del problema.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

niniodinho

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Problema con la funcion Getline
« Respuesta #4 en: Sábado 18 de Abril de 2009, 01:50 »
0
Claro, utilizo esa misma función, pero me pide el ingreso por el teclado sólo en la primera vuelta del ciclo. Luego, saltea esa línea únicamente, y el programa devuelve un número negativo de 6 cifras mas o menos, en vez del 0.
Qué puedo hacer para que me deje ingresar por teclado las veces que dura el ciclo?
Gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema con la funcion Getline
« Respuesta #5 en: Sábado 18 de Abril de 2009, 09:45 »
0
Podes pedir los votos asi supongo:

Código: Text
  1. cout<<"Ingrese la cantidad de votos recibidos"<<endl;
  2. string mystr;
  3. getline(cin, mystr);
  4. stringstream(mystr) >> ArrPartidos[i].votos;
  5.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.