elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Cuando hay espacios en el ingreso del nombre el programa termina
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cuando hay espacios en el ingreso del nombre el programa termina  (Leído 2,857 veces)
matver

Desconectado Desconectado

Mensajes: 34


Ver Perfil
Cuando hay espacios en el ingreso del nombre el programa termina
« en: 7 Marzo 2017, 22:18 pm »

Código
  1.  
  2.  
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. class empleado {
  7. public:
  8.   void asignar ();
  9.   void leer();
  10. private:
  11.   char nombre [40];
  12.   int numemple;
  13. };
  14. void empleado::asignar()
  15. {
  16. cout<<"ingrese nombre de empleado";
  17. cin>>nombre;
  18. cout<<"ingrese numero de empleado:";
  19. cin>>numemple;
  20. }
  21. void empleado::leer(){
  22. cout<<"nombre de empleadoes :"<<nombre<<endl;
  23. cout<<"numero de empleado es:"<<numemple<<endl;
  24. }
  25. int main (){
  26. char nombre [40];
  27. int numemple;
  28. empleado emp_obj;
  29. emp_obj.asignar();
  30. emp_obj.leer();
  31. }
  32.  

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.


« Última modificación: 7 Marzo 2017, 22:21 pm por matver » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Cuando hay espacios en el ingreso del nombre el programa termina
« Respuesta #1 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
  1. std::getline(std::cin, mi_cadena);


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Cuando hay espacios en el ingreso del nombre el programa termina
« Respuesta #2 en: 8 Marzo 2017, 13:50 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
  1. std::getline(std::cin, mi_cadena);
Para std::string, sí. Para char*, entonces será:
Código
  1. cin.getline(cadena, tamaño_cadena); // Lee hasta '\n'
  2. // O
  3. cin.getline(cadena, tamaño_cadena, caracter_delimitador); // Lee hasta el delimitador

O sea:
Código
  1. cin.getline(nombre, 40);
En línea

matver

Desconectado Desconectado

Mensajes: 34


Ver Perfil
Re: Cuando hay espacios en el ingreso del nombre el programa termina
« Respuesta #3 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
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. class publicacion{
  5.  
  6. public:
  7.    void asignar();
  8.    void mostrar();
  9. private:
  10.    char titulo [25];
  11.    float precio;
  12. };
  13.  
  14. void publicacion::asignar()
  15. {
  16. cout<<"Ingrese el titulo:";
  17. cin.getline(titulo,25);
  18. cout<<"ingrese el precio:";
  19. cin>>precio;
  20. }
  21. void publicacion::mostrar()
  22. {
  23. cout<<"Titulo del libro:"<<titulo<<endl;
  24. cout<<"PRecio del libro:"<<precio<<endl;
  25. }
  26.  
  27. int main (void){
  28. char titulo;
  29. float precio;
  30. publicacion libro1_obj;
  31. libro1_obj.asignar();
  32. libro1_obj.mostrar();
  33.  
  34.  
  35. }
  36.  
  37.  

Gracias por tu comentario MAFUS.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines