Cuando hay espacios en el ingreso del nombre el programa termina

Iniciado por matver, 7 Marzo 2017, 22:18 PM

0 Miembros y 1 Visitante están viendo este tema.

matver

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.

MAFUS

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);

ivancea96

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);

matver

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.