Problema al leer cadenas con espacios [C++]

Iniciado por Don Pollo, 19 Mayo 2011, 18:30 PM

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

Don Pollo

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.  :)


Don Pollo

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?

Lx

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.