Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda!! Clases con cin.getline!!

Estas en el tema de Ayuda!! Clases con cin.getline!! en el foro de C/C++ en Foros del Web. Hola gracias por revisar mi post, me surge un problema cuando trato de usar cin.getline con variables encapsuladas en una clase el cual no me ...
  #1 (permalink)  
Antiguo 08/04/2007, 13:34
Avatar de TheJez  
Fecha de Ingreso: agosto-2004
Ubicación: México - Distrito Federal
Mensajes: 176
Antigüedad: 19 años, 8 meses
Puntos: 0
Ayuda!! Clases con cin.getline!!

Hola gracias por revisar mi post, me surge un problema cuando trato de usar cin.getline con variables encapsuladas en una clase el cual no me explico... trabajo con dev-c++, mi codigo es el siguiente:

Código:
#include <iostream>
using namespace std;
struct lugares { 
             int lugar;
             char nombre[30];
             char domicilio[30];
 };
int main(void) {
    lugares objeto[10];
    string continuar="si";
    int opcion;
    while(continuar == "si" || continuar == "SI"){
    system("cls");
    cout << "Selecciona una opcion!!\n";
    cout << "\n";
    cout << "1) Asignar todos los registros\n";
    cout << "2) Modificar\n";
    cout << "3) Eliminar\n";
    cout << "4) Ordenar\n";
    cout << "5) Buscar\n";
    cout << "6) Ver Datos\n";
    cin >> opcion;
 
 if(opcion == 1) {
 for (int i=0; i<10; i++){
 objeto[i].lugar = i+1;
 cout << "Nombre: \n";
 cin.getline(objeto[i].nombre,30);
 cout << "Domicilio: \n";
 cin.getline(objeto[i].domicilio,30);
 cout << "Anadido!!\n";
        }
 cout << "Continuar? Si, No\n";
 cin >> continuar;
              
}
    system("pause");
    
}
al ejecutarlo, y ponerle la opcion 1, en el primer aumento del for no me pide el contenido de la variable objeto[0].nombre no pone nada y se sigue con objeto[0].domicilio sencillamente me pone en pantalla

Nombre:
Domicilio:
_(aqui me pide el valor de domicilio, el de nombre se lo salta)

y de ahi en adelante funciona todo bien, en los demas aumentos del for si me pide el valor de nombre y no me explico por que sera espero alguien pueda saber donde esta el error y me heche una mano
__________________
"Knowledge is power..."
"Conocimiento es poder"
TheJez^
  #2 (permalink)  
Antiguo 08/04/2007, 18:37
Kal
 
Fecha de Ingreso: marzo-2007
Mensajes: 17
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Ayuda!! Clases con cin.getline!!

Después del último cin.getline, usa:
Código PHP:
cin.seekg(0ios::end);
cin.clear(); 
Ya que se queda guardado el caracter delimitador de getline que es el '\n', que se guarda al darle enter, por eso te da el brinco.
  #3 (permalink)  
Antiguo 02/09/2008, 14:55
 
Fecha de Ingreso: febrero-2006
Mensajes: 20
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Ayuda!! Clases con cin.getline!!

Cita:
Iniciado por TheJez Ver Mensaje
Hola gracias por revisar mi post, me surge un problema cuando trato de usar cin.getline con variables encapsuladas en una clase el cual no me explico... trabajo con dev-c++, mi codigo es el siguiente:

Código:
#include <iostream>
using namespace std;
struct lugares { 
             int lugar;
             char nombre[30];
             char domicilio[30];
 };
int main(void) {
    lugares objeto[10];
    string continuar="si";
    int opcion;
    while(continuar == "si" || continuar == "SI"){
    system("cls");
    cout << "Selecciona una opcion!!\n";
    cout << "\n";
    cout << "1) Asignar todos los registros\n";
    cout << "2) Modificar\n";
    cout << "3) Eliminar\n";
    cout << "4) Ordenar\n";
    cout << "5) Buscar\n";
    cout << "6) Ver Datos\n";
    cin >> opcion;
 
 if(opcion == 1) {
 for (int i=0; i<10; i++){
 objeto[i].lugar = i+1;
 cout << "Nombre: \n";
 cin.getline(objeto[i].nombre,30);
 cout << "Domicilio: \n";
 cin.getline(objeto[i].domicilio,30);
 cout << "Anadido!!\n";
        }
 cout << "Continuar? Si, No\n";
 cin >> continuar;
              
}
    system("pause");
    
}
al ejecutarlo, y ponerle la opcion 1, en el primer aumento del for no me pide el contenido de la variable objeto[0].nombre no pone nada y se sigue con objeto[0].domicilio sencillamente me pone en pantalla

Nombre:
Domicilio:
_(aqui me pide el valor de domicilio, el de nombre se lo salta)

y de ahi en adelante funciona todo bien, en los demas aumentos del for si me pide el valor de nombre y no me explico por que sera espero alguien pueda saber donde esta el error y me heche una mano
Se que ha pasado mucho tiempo, pero al igual que accedido por google , podría pasarle a otra persona y confundirle..

Yo creo que la solución del clear no es correcta.
Utilizar el cin y el cin.getline en un mismo módulo no es una idea.
O utilizas cin sólamente o el cin.getline.

Esto es así, porque getline lee hasta encontrar un \n, con lo que lee una cadena vacía.
  #4 (permalink)  
Antiguo 03/09/2008, 07:09
Avatar de WaRc3L  
Fecha de Ingreso: agosto-2008
Ubicación: My House
Mensajes: 89
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Ayuda!! Clases con cin.getline!!

Yo uso cin.getline para leer frases, incluido los espacios. Yo solo lo hago servir el cin.getline para almanecar frases una matriz, y el cin para almanecar palabras normales ( sin espacios ), si sabes que el usuario te va almanecar una frase, puedes hacer servir cin sin ningun problema, pero al problema esta, quando en medio programa, tienes que pedir una frase entera ( con espacios o sin, depende de la frase ) y despues hago servir el cin.getline.

Espero que hos haya ayudado en algo, si tenemos que escoger uno de los dos, yo sinceramente escogeria cin.getline, ya que almacena frases con y sin espacios.

Saludos! y espero que hos haya ayudado!
__________________
Habla tu lenguaje favorito! Habla C++!
  #5 (permalink)  
Antiguo 19/06/2009, 19:11
 
Fecha de Ingreso: junio-2009
Mensajes: 14
Antigüedad: 14 años, 10 meses
Puntos: 1
Busqueda Respuesta: Ayuda!! Clases con cin.getline!!

Cita:
Iniciado por WaRc3L Ver Mensaje
Yo uso cin.getline para leer frases, incluido los espacios. Yo solo lo hago servir el cin.getline para almanecar frases una matriz, y el cin para almanecar palabras normales ( sin espacios ), si sabes que el usuario te va almanecar una frase, puedes hacer servir cin sin ningun problema, pero al problema esta, quando en medio programa, tienes que pedir una frase entera ( con espacios o sin, depende de la frase ) y despues hago servir el cin.getline.

Espero que hos haya ayudado en algo, si tenemos que escoger uno de los dos, yo sinceramente escogeria cin.getline, ya que almacena frases con y sin espacios.

Saludos! y espero que hos haya ayudado!

Yo tambien tengo el mismo problema y solo uso el cin.getline();
Este problema me aparece cuando lo uso en una funcion,

#include <iostream>
#include <cstdlib>

//y...

void encripta(bool flagBug){
system("cls");
char segmento[255];
cout<<"Ingresa una cadena: ";
cin.getline (segmento,255);
//para hacer pruebas:
cout<<endl<<segmento<<endl;
system("pause");
//... y el codigo continua...

Al momento de llegar a esta parte solo aparece
Ingresa una cadena
y directamente pasa hasta system("pause");
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:00.