Ejercicio simple estructuras

Iniciado por Ja_90, 13 Octubre 2014, 09:33 AM

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

Ja_90

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 (cpp) [Seleccionar]

#include <iostream>
#include <string>

using std::cout;
using std::cin;
using std::endl;
using std::string;

struct Employees   // struct's name
{
    string name;
    string sex;
    float pay;
};

int main()
{
    int number;  // # employees 

    cout << "Enter # Employees: ";
    cin >> number;

    struct Employees data[number];  // declare data type of Employees

    int i;

    for(i=0 ; i<number ; i++)   // Loop to save all data
    {
        cout << "Name: ";
        getline(cin,data[i].name);
        cout << "Sex: ";
        getline(cin,data[i].sex);
        cout << "Payment: ";
        cin >> data[i].pay;
    }
   
   //Loop to print out

    for(i=0 ; i<number ; i++)
    {
        cout << data[i].name << endl;
        cout << data[i].sex << endl;
        cout << data[i].pay <<"\n\n";
    }

    return 0;
}


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 (cpp) [Seleccionar]

data[i].name

Muchas gracias por su colaboracion, cualquier consejo, critica constuctiva bienvenida sea.
:D  ::::Ja_90::::   :D

ivancea96

O usas getline para pedir el dinero, o pones cin.ignore() después del cin para ignorar el salto de linea.

DeMoNcRaZy

Buenas,

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

Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
#include <stdlib.h>

using namespace std;

struct Employees   // struct's name
{
    string name;
    string sex;
    float pay;
};

int main()
{
    int number;  // # employees 

    cout << "Enter # Employees: ";
    cin >> number;

    struct Employees data[number];  // declare data type of Employees

    int i;

    for(i=0 ; i < number ; i++)   // Loop to save all data
    {
        cout << "Name: ";
        cin >> data[i].name;
        cout << "Sex: ";
        cin >> data[i].sex;
        cout << "Payment: ";
        cin >> data[i].pay;
    }

   //Loop to print out

    for(i=0 ; i<number ; i++)
    {
        cout << "\n" << data[i].name << endl;
        cout << data[i].sex << endl;
        cout << data[i].pay <<"\n\n";
    }
   
    system("PAUSE"); // paramos el programa para que no se cierre
    return 0;
}
Esta página web no está disponible - Google Chrome

rir3760

Cita de: Ja_90 en 13 Octubre 2014, 09:33 AMNo 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().

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Ja_90

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.
:D  ::::Ja_90::::   :D