Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Don Pollo en 19 Mayo 2011, 18:30 pm



Título: Problema al leer cadenas con espacios [C++]
Publicado por: Don Pollo en 19 Mayo 2011, 18:30 pm
Veréis, tengo esta función:

Código:
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.  :)


Título: Re: Problema al leer cadenas con espacios [C++]
Publicado por: d00ze13 en 19 Mayo 2011, 19:00 pm
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


Título: Re: Problema al leer cadenas con espacios [C++]
Publicado por: Don Pollo en 19 Mayo 2011, 19:12 pm
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?


Título: Re: Problema al leer cadenas con espacios [C++]
Publicado por: Lx en 20 Mayo 2011, 03:49 am
Mmm.. Probé tu código y me lee todo ...

Pero si no es así contigo prueba esto:

Código
  1. void Farmacia::meterMedicamento(){
  2.   string acodigo;
  3.    char anombre[50];
  4.    char aformato[50];
  5.    string alaboratorio;
  6.    float apvp;
  7.   Casilla *cas;
  8.    int unidades;
  9.  
  10.    cout << "Inserte el nombre del medicamento: ";
  11.    cin>>anombre;
  12.    do{
  13.    cout<<"Inserte el código de 7 dígitos: ";
  14.    cin>>acodigo;
  15.    }while(acodigo.length()!=7);
  16.    while(getchar()!='\n');
  17.    cout<<"Inserte el formato del medicamento: ";
  18.    cin.getline( aformato, 50);
  19.    cout<<"Inserte el laboratorio: ";
  20.    cin>>alaboratorio;
  21.    cout<<"Inserte el precio: ";
  22.    cin>>apvp;
  23.    cout<<"Indique las unidades que habrá en el stock: ";
  24.    cin>>unidades;
  25.    while(getchar()!='\n');
  26.  
  27.    if(unidades>=0){
  28.   Medicamento med(acodigo, anombre, aformato, alaboratorio, apvp);
  29.   this->nuevoMedicamento(&med);
  30.   cas = this->casillaVacia();
  31.   this->colocarMedicinaEstante(med.verCodigo(), cas, unidades);
  32.    }

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.