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!
En C++ no necesitas poner "typedef struct".
¿Qué error te marca?
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 . . .
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:
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);".