Programación General > C/C++
Problema con la funcion Getline
niniodinho:
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:
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++ --- char nombre[50] cin.getline(nombre, 50);
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:
niniodinho:
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:
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.
niniodinho:
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
Navegación
[#] Página Siguiente
Ir a la versión completa