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
#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:
data[i].name
Muchas gracias por su colaboracion, cualquier consejo, critica constuctiva bienvenida sea.
O usas getline para pedir el dinero, o pones cin.ignore() después del cin para ignorar el salto de linea.
Buenas,
No se si es exactamente lo que estás buscando pero puedes probar con esto y nos comentas:
#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;
}
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() (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
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.