Problema con estructuras..

Iniciado por Black cracker, 15 Agosto 2015, 23:20 PM

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

Black cracker

Hola gente, que tal? Me preguntaba si me podrían ayudar con un simple problemita. La cuestión es que estoy haciendo un programa donde necesito capturar los datos de un vehículo junto con los del chófer. Donde una estructura sea el vehículo en si y luego que cada vehículo contenga una estructura con el nombre, carne y id del chófer, pero se me ha ocurrido hacer una estructura que contenga otra que sea la del chófer pero al parecer no me funciona.

struct conductor{
char nombre;
int cedula;
int carne;
};

typedef struct vehiculo{
int placa;
char localidad[10];
int capacidad;
conductor chofer;
bool activo;
};

void agregar(vehiculo inventario[], int &cont){
cout << "Digite la placa del vehiculo ";
cin >> inventario[cont].placa;
cout << "Digite la localiacion general del vehiculo ";
cin >> inventario[cont].localidad;
cout << "Digite la capacidad del vehiculo: ";
cin >> inventario[cont].capacidad;
cout << "Digite el nombre del chofer: ";
cin >> inventario[cont].chofer.nombre;
cout << "Digite la cedula del chofer: ";
cin >> inventario[cont].chofer.cedula;
cout << "Digite el carne del chofer: ";
cin >> inventario[cont].chofer.carne;
inventario[cont].activo = true;
}
void main(){

vehiculo inventario[100];
int cont = 0;
agregar(inventario, cont);


¡GRACIAS!

ivancea96

En C++ no necesitas poner "typedef struct".

¿Qué error te marca?

Black cracker

No me marca error, sino que como que se salta los "cin" del la segunda estructura...

Digite la placa del vehiculo 123456
Digite la localiacion general del vehiculo Mexico
Digite la capacidad del vehiculo: 7
Digite el nombre del chofer: Andres
Digite la cedula del chofer: Digite el carne del chofer: Presione una tecla para continuar . . .

ivancea96

Código (cpp) [Seleccionar]
char nombre;

El nombre de chofer es un char, no un char* ni un char[]. Tendrás que ponerlo como pusiste localidad, "char nombre[20]" por ejemplo.

El problema es que cin lee 1 caracter de "Andres", así que se queda en el buffer "ndres". Luego, al pedir un int, como "ndres" no es un número, da error.

Por cierto, en C++, en vez de "char localidad[10]", puedes y deberías poner "string localidad". Lo mismo con "string nombre".


Si quieres evitarte errores con el cin, puedes leer linea a linea con:
Código (cpp) [Seleccionar]
string str;
getline(cin, str);

// Y por ejemplo:
inventario[cont].chofer.cedula = stoi(str);


stoi() es una función útil que transforma una string a su valor numérico. Si trabajas con char* o char[], puedes usar "atoi(char* cadena, int longitud);".