Veréis, tengo esta función:
void Farmacia::meterMedicamento(){
string acodigo;
char anombre[50];
char aformato[50];
string alaboratorio;
float apvp;
Casilla *cas;
int unidades;
cout << "Inserte el nombre del medicamento: ";
cin>>anombre;
do{
cout<<"Inserte el código de 7 dígitos: ";
cin>>acodigo;
}while(acodigo.length()!=7);
cout<<"Inserte el formato del medicamento: ";
//cin>>aformato;
fflush(stdin);
fgets(aformato,50,stdin);
aformato[strlen(aformato)-1]='\0';
cout<<"Inserte el laboratorio: ";
cin>>alaboratorio;
cout<<"Inserte el precio: ";
cin>>apvp;
cout<<"Indique las unidades que habrá en el stock: ";
cin>>unidades;
if(unidades>=0){
Medicamento med(acodigo, anombre, aformato, alaboratorio, apvp);
this->nuevoMedicamento(&med);
cas = this->casillaVacia();
this->colocarMedicinaEstante(med.verCodigo(), cas, unidades);
}
Y cuando pasa por leer el formato del medicamento, se lo salta directamente y no puedo introducírselo.
Me podéis decir qué está mal?
Gracias de antemano. :)
leete este post que tienes mas abajo a ver si te puede solventar tus dudas
http://foro.elhacker.net/programacion_cc/guarda_cadenas_con_espacios_como-t327983.0.html
Lo he puesto como dicen en el post que has puesto, pero se sigue saltando la lectura del parámetro. A qué se puede deber?
Mmm.. Probé tu código y me lee todo ...
Pero si no es así contigo prueba esto:
void Farmacia::meterMedicamento(){
string acodigo;
char anombre[50];
char aformato[50];
string alaboratorio;
float apvp;
Casilla *cas;
int unidades;
cout << "Inserte el nombre del medicamento: ";
cin>>anombre;
do{
cout<<"Inserte el código de 7 dígitos: ";
cin>>acodigo;
}while(acodigo.length()!=7);
while(getchar()!='\n');
cout<<"Inserte el formato del medicamento: ";
cin.getline( aformato, 50);
cout<<"Inserte el laboratorio: ";
cin>>alaboratorio;
cout<<"Inserte el precio: ";
cin>>apvp;
cout<<"Indique las unidades que habrá en el stock: ";
cin>>unidades;
while(getchar()!='\n');
if(unidades>=0){
Medicamento med(acodigo, anombre, aformato, alaboratorio, apvp);
this->nuevoMedicamento(&med);
cas = this->casillaVacia();
this->colocarMedicinaEstante(med.verCodigo(), cas, unidades);
}
Cada vez que dejes de hacer lecturas cin o scanf debes poner while(getchar()!='\n') para limpiar la basura del buffer que deja esas funciones de lectura.