Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: matver en 7 Marzo 2017, 22:18 PM

Título: Cuando hay espacios en el ingreso del nombre el programa termina
Publicado por: matver en 7 Marzo 2017, 22:18 PM
Código (cpp) [Seleccionar]



#include <iostream>
using namespace std;

class empleado {
public:
  void asignar ();
  void leer();
private:
  char nombre [40];
  int numemple;
};
void empleado::asignar()
{
cout<<"ingrese nombre de empleado";
cin>>nombre;
cout<<"ingrese numero de empleado:";
cin>>numemple;
}
void empleado::leer(){
cout<<"nombre de empleadoes :"<<nombre<<endl;
cout<<"numero de empleado es:"<<numemple<<endl;
}
int main (){
char nombre [40];
int numemple;
empleado emp_obj;
emp_obj.asignar();
emp_obj.leer();
}


Sabe alguien  por que si dejo espacios en la lectura de el nombre, el programa continua y termina sin dejarme ingresar el número de empleado.
Título: Re: Cuando hay espacios en el ingreso del nombre el programa termina
Publicado por: MAFUS en 8 Marzo 2017, 12:23 PM
Supongo que, al igual que scanf, cin usa los espacios en blanco como separadores de datos. Cuando encuentra uno cree que ha llegado al final de la cadena esperada.
En C++, creo que para adquirir una cadena con espacios es con
Código (c++) [Seleccionar]
std::getline(std::cin, mi_cadena);
Título: Re: Cuando hay espacios en el ingreso del nombre el programa termina
Publicado por: ivancea96 en 8 Marzo 2017, 13:50 PM
Cita de: MAFUS en  8 Marzo 2017, 12:23 PM
Supongo que, al igual que scanf, cin usa los espacios en blanco como separadores de datos. Cuando encuentra uno cree que ha llegado al final de la cadena esperada.
En C++, creo que para adquirir una cadena con espacios es con
Código (c++) [Seleccionar]
std::getline(std::cin, mi_cadena);
Para std::string, sí. Para char*, entonces será:
Código (cpp) [Seleccionar]
cin.getline(cadena, tamaño_cadena); // Lee hasta '\n'
// O
cin.getline(cadena, tamaño_cadena, caracter_delimitador); // Lee hasta el delimitador


O sea:
Código (cpp) [Seleccionar]
cin.getline(nombre, 40);
Título: Re: Cuando hay espacios en el ingreso del nombre el programa termina
Publicado por: matver en 9 Marzo 2017, 13:14 PM
Ante todo gracias, en este programa puedo usar tu consejo. Dicho programa tiene una clase llamada publicación y se requiere guardar el titulo y el precio. Una forma de hacerlo fue así:
Código (cpp) [Seleccionar]

#include <iostream>
#include <string>
using namespace std;
class publicacion{

public:
    void asignar();
    void mostrar();
private:
    char titulo [25];
    float precio;
};

void publicacion::asignar()
{
cout<<"Ingrese el titulo:";
cin.getline(titulo,25);
cout<<"ingrese el precio:";
cin>>precio;
}
void publicacion::mostrar()
{
cout<<"Titulo del libro:"<<titulo<<endl;
cout<<"PRecio del libro:"<<precio<<endl;
}

int main (void){
char titulo;
float precio;
publicacion libro1_obj;
libro1_obj.asignar();
libro1_obj.mostrar();


}



Gracias por tu comentario MAFUS.