Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Ja_90 en 13 Octubre 2014, 09:33 am



Título: Ejercicio simple estructuras
Publicado por: Ja_90 en 13 Octubre 2014, 09:33 am
Buenas, ando por aca queriendo aclarar el porque no me ejecuta de manera correcta este codigo.

 Aclaro: En el codigo las variables estan en ingles por que necesito practicar mi ingles ;D

Código
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using std::cout;
  5. using std::cin;
  6. using std::endl;
  7. using std::string;
  8.  
  9. struct Employees   // struct's name
  10. {
  11.    string name;
  12.    string sex;
  13.    float pay;
  14. };
  15.  
  16. int main()
  17. {
  18.    int number;  // # employees  
  19.  
  20.    cout << "Enter # Employees: ";
  21.    cin >> number;
  22.  
  23.    struct Employees data[number];  // declare data type of Employees
  24.  
  25.    int i;
  26.  
  27.    for(i=0 ; i<number ; i++)   // Loop to save all data
  28.    {
  29.        cout << "Name: ";
  30.        getline(cin,data[i].name);
  31.        cout << "Sex: ";
  32.        getline(cin,data[i].sex);
  33.        cout << "Payment: ";
  34.        cin >> data[i].pay;
  35.    }
  36.  
  37.   //Loop to print out
  38.  
  39.    for(i=0 ; i<number ; i++)
  40.    {
  41.        cout << data[i].name << endl;
  42.        cout << data[i].sex << endl;
  43.        cout << data[i].pay <<"\n\n";
  44.    }
  45.  
  46.    return 0;
  47. }
  48.  

Cuando lo ejecuto me sale esto:
------------------------------------------

Enter # Employees: 2   // (coloco el #)

Name: Sex:

----------------------------------
No me deja ingresar el Nombre, sino que me sale seguido Sex cuando deberia salir en la siguiente linea luego de yo digitar el nombre y que quede guardado en:
Código
  1. data[i].name
  2.  
Muchas gracias por su colaboracion, cualquier consejo, critica constuctiva bienvenida sea.


Título: Re: Ejercicio simple estructuras
Publicado por: ivancea96 en 13 Octubre 2014, 09:42 am
O usas getline para pedir el dinero, o pones cin.ignore() después del cin para ignorar el salto de linea.


Título: Re: Ejercicio simple estructuras
Publicado por: DeMoNcRaZy en 13 Octubre 2014, 11:54 am
Buenas,

No se si es exactamente lo que estás buscando pero puedes probar con esto y nos comentas:

Código
  1. #include <iostream>
  2. #include <string>
  3. #include <stdlib.h>
  4.  
  5. using namespace std;
  6.  
  7. struct Employees   // struct's name
  8. {
  9.    string name;
  10.    string sex;
  11.    float pay;
  12. };
  13.  
  14. int main()
  15. {
  16.    int number;  // # employees  
  17.  
  18.    cout << "Enter # Employees: ";
  19.    cin >> number;
  20.  
  21.    struct Employees data[number];  // declare data type of Employees
  22.  
  23.    int i;
  24.  
  25.    for(i=0 ; i < number ; i++)   // Loop to save all data
  26.    {
  27.        cout << "Name: ";
  28.        cin >> data[i].name;
  29.        cout << "Sex: ";
  30.        cin >> data[i].sex;
  31.        cout << "Payment: ";
  32.        cin >> data[i].pay;
  33.    }
  34.  
  35.   //Loop to print out
  36.  
  37.    for(i=0 ; i<number ; i++)
  38.    {
  39.        cout << "\n" << data[i].name << endl;
  40.        cout << data[i].sex << endl;
  41.        cout << data[i].pay <<"\n\n";
  42.    }
  43.  
  44.    system("PAUSE"); // paramos el programa para que no se cierre
  45.    return 0;
  46. }


Título: Re: Ejercicio simple estructuras
Publicado por: rir3760 en 13 Octubre 2014, 16:40 pm
No me deja ingresar el Nombre, sino que me sale seguido Sex cuando deberia salir en la siguiente linea luego de yo digitar el nombre
Ese problema se debe al uso intercalado del operador ">>" y la función getline, para solucionarlo se debe eliminar el resto de la linea después de pedir el numero de empleados y, como ya te comento ivancea96, después de pedir el pago. Un programa de ejemplo sobre el uso de la función ignore se encuentra en el tema getline() (http://foro.elhacker.net/buscador-t421123.0.html).

Y la declaración del array "data" indica el numero de elementos de este mediante un valor calculado en tiempo de ejecución, el problema: su soporte depende del compilador (no es parte del estándar de C++), por ello mejor utiliza un objeto de la clase vector (hay muchos ejemplos sobre el uso de esa clase en la base de datos de los foros, solo es cuestión de utilizar el motor de búsqueda).

Un saludo


Título: Re: Ejercicio simple estructuras
Publicado por: Ja_90 en 13 Octubre 2014, 20:33 pm
Muchas gracias por sus respuestas, lo corregi utilizando el cin.ignore();.....gracias ivancea96

rir3760 ...Aun no he visto vectores...estoy de autodidacta, asi que cuando llegue alli hare uso de lo que me dices....Ademas creo que podre ver la diferencia entre usar ambos, espero...Igualmente muchas gracias por tus consejos.

YuseTist...Creo que no era lo que estaba buscando, igualmente gracias por tu respuesta y la verdad no uso system("PAUSE") ya que no tiene portabilidad, lo hacia cuando usaba Windows, ahora en linux es totalmente inutil, me da error, por eso ya asi lo haga en Windows no lo utilizo.

Muchas gracias.