problema con cin.getline..

Riu

class clase {
        alumno alumnos[20];
        int numero;
        int numalumnos;

    public:
    void cargarclase();/*Pide al usuario el número de alumnos de la clase
    y carga para cada uno sus datos: tanto personales
    como de estudios matriculados*/
    void matriculasNoPagadas();/*muestra por pantalla el nombre, dni y tlf de
    los alumnos que no han pagado sus matriculas*/
    };

    void clase::cargarclase(){
            int numalum=0,numcursos=1,numasig=0;
            int f=0;
            char pagado;
            char final[]="\0";
            char nombre[20];


            cout<<"Introduce el numero de alumnos: (max 20)";
            cin>>numalum;
            numalumnos=numalum;

            for(int i=0;i<numalum;i++){
                    cout<<"\nIntroduce el nombre del Alumno :";

                    cin.getline(alumnos[i].nombre,20);

                    cout<<"\nIntroduce el dni del alumno sin letra: ";
                     cin>>alumnos[i].dni;
                     cout<<"\nIntroduce su direccion: ";
                     cin>>alumnos[i].direccion;
                     cout<<"\nIntroduce Su peso: ";
                     cin>>alumnos[i].tlf;

                 
}






int main(){
 clase miclase;
 miclase.cargarclase();
 miclase.matriculasNoPagadas();
 system("Pause");
return 0;
}

pq no funciona el cin.getline, me salta esa linea como si la introdujera pero esta en blanco..
he quitado parte del codigo pq es un ejercicio a entregar y despues dicen ke la gente se copietea xddd

r2d2rigo

Porque anteriormente has hecho un cin. Justo debajo de ese cin pon otro cin.getline hacia una cadena de caracteres temporal, para que ahi se capture lo sobrante.

Riu

#2
que te refieres a que ponga despues de el primer cin.getline, otro? no entiendo muy bien, ya que deberia funcionar asi. yo al menos lo hago funcionar asi en una sola sentencia, no entiendo muy bien por que hay que hacerlo de la forma que tu dices..

Edit.
Haciendolo como tu dices solo recojo basura en la variable temporal y en la que quiero guardarlo no recojo nada..

r2d2rigo

Cada vez que vayas a leer mediante cin, es conveniente que despues metas un cin.getline para vaciar el bufer y que asi la proxima lectura sea correcta.

1
BLZKZ

el problema lo solucionas con cin.ignore(); antes del getline.

Los strings en c++ dan problemas a patadas :S

Siempre que te pase eso pon antes del cin que te de problemas cin.ignore() deberia solucionarlo. ¿Cuándo pasa? es todo un misterio xD solo se sabe cuando te da el error.

salu2

1

Usuarios habituales

  • BLZKZ
  • r2d2rigo
  • Riu