Problem with getline and class giving weird numbers

Hi guys, i am trying to use only C++, therefore I had a problem with getline and int, once I resolved it I started to input the data,the problem is when I run it something weird happens, I input the first number, press enter, then nothing happens, I keep pressing enter, and the data starts filling on its own.

Here is the code so you can understand my problem better than my lousy explanation.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <iostream>
#include <fstream>
#include <ios>
#include <iomanip>
#include <cstdlib>
#include <limits>

#include "Criminal.h"

int main()
{
    int nSerie, edad, peso, altura;
    std::string tipoCrimen, nombre, apellidos, direccionCompleta, lugarTrabajo, nacionalidad, cOjos, cCabello, genero, hDigital, foto;
    std::fstream Delincuentes;

    Delincuentes.open(" Delincuentes.dat ", std::ios::out | std::ios::binary );

    if(!Delincuentes)
    {
        std::cerr << "No se pudo abrir archivo";
        std::exit(1);
    }

    // Comienzan datos para obtener tamanio del archivo
    char * buffer;
    long tamanio;

    //Obtener tamanio del archivo
    Delincuentes.seekg(0, std::ios::end);
    tamanio = Delincuentes.tellg();
    Delincuentes.seekg(0);

    //Poner tamanio del archivo en memoria
    buffer = new char [tamanio];

    Criminal PrimerLista;
    std::cout << "Escriba un numero de Serie entre 0 y 100. " << std::endl;

    std::string Temporal = "";
    std::string ed01;
    std::string pe01;
    std::string al01;

    getline(std::cin, Temporal);
    if( ! ( std::istringstream(Temporal) >> nSerie) ) nSerie = 0;

    while(nSerie > 0 && nSerie <= 100)
    {
        std::cout << std::left << "Tipo de Crimen: " << getline(std::cin, tipoCrimen) << "Nacionalidad: " << getline(std::cin, nacionalidad) << std::endl;
        std::cout << std::left << "Nombre: " << getline(std::cin, nombre) << getline(std::cin, apellidos) << std::endl;
        std::cout << std::left << "Edad: " << getline(std::cin, ed01) << "Peso (kg): " << getline(std::cin, pe01) << "Altura (cm): " << getline(std::cin, al01) << "Genero: " << getline(std::cin, genero) << std::endl;
        if( ! ( std::istringstream(ed01) >> edad) ) edad = 0;
        if( ! ( std::istringstream(pe01) >> peso) ) peso = 0;
        if( ! ( std::istringstream(al01) >> altura) ) altura = 0;
        std::cout << std::left << "Direccion: " << getline(std::cin, direccionCompleta) << std::endl;
        std::cout << std::left << "Lugar de Trabajo: " << getline(std::cin, lugarTrabajo) << "Color de Ojos: " << getline(std::cin, cOjos) << std::endl;
        std::cout << std::left << "Color de Cabello: " << getline(std::cin, cCabello) << "Ingresa Huella Digital? (S o N) " << getline(std::cin, hDigital) << std::endl;
        std::cout << std::left << "Ingresa Fotografia del Sujeto? (S o N) " << getline(std::cin, foto) << std::endl;

        PrimerLista.setnumeroSerie ( nSerie );
        PrimerLista.settipoCrimen ( tipoCrimen );
        PrimerLista.setNombre ( nombre );
        PrimerLista.setApellido ( apellidos );
        PrimerLista.setelGenero ( genero );
        PrimerLista.setedad ( edad );
        PrimerLista.setpeso ( peso );
        PrimerLista.setaltura ( altura );
        PrimerLista.setdireccionCompleta ( direccionCompleta );
        PrimerLista.setlugarTrabajo ( lugarTrabajo );
        PrimerLista.setcolorOjos ( cOjos );
        PrimerLista.setNacionalidad ( nacionalidad );
        PrimerLista.setcolorCabello ( cCabello );
        PrimerLista.sethuellaDigital ( hDigital );
        PrimerLista.setfotografia ( foto );

        Delincuentes.seekp( (PrimerLista.getnumeroSerie() - 1) * sizeof(PrimerLista) );

        Delincuentes.write( buffer, sizeof(PrimerLista) );

        std::cout << "Escriba otro numero de Serie (0 para salir): " << getline(std::cin, Temporal);
    }
    delete[] buffer;
    Delincuentes.close();
    return 0;
}
Here is the header to run it as well

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
/* HEADER FILE ------------------------------------
-------------------------------------------------*/

#ifndef CRIMINAL_H
#define CRIMINAL_H
#include <sstream>


class Criminal{
private:
    /*Información no modificable de la clase
    Los arreglos de Caracteres serán utilizados
    como Strings más adelante, sin embargo tienen
    longitud fija para facilitar su manipulación*/
    int valornumeroSerie, valoredad, valorpeso, valoraltura;
    std::string valortipoCrimen;
    std::string valorNombres;
    std::string valorApellidos;
    std::string valordireccionCompleta;
    std::string valorlugarTrabajo;
    std::string valorcolorOjos;
    std::string valorNacionalidad;
    std::string valorcolorCabello;
    std::string valorgenero;
    std::string valorhuellaDigital;
    std::string valorfotografia;

public:
    /*Constuctor: Crea un Criminal con los siguientes Valores
    Número de Serie, Tipo de Crimen, Nombre Completo (4 std::strings), Género
    Edad, Peso, Altura, Dirección (2 std::strings), lugar de Trabajo, Color de Ojos,
    Color de Piel, Color de Cabello, Huella Digital, Fotorafía*/
    Criminal(int=0, std::string = "",
             std::string = "", std::string = "", std::string = "",
             int=0, int=0, int=0,
             std::string = "", std::string = "",std::string = "",
             std::string = "",std::string = "",std::string = "",std::string = "");

    //Funciones de Acceso para Número de Serie
    void setnumeroSerie(int nSerie)
    {
        valornumeroSerie = nSerie;
    }
    int getnumeroSerie() const
    {
        return valornumeroSerie;
    }

    //Funciones de Acceso para Tipo de Crimen
    void settipoCrimen(const std::string & tipoCrimen)
    {
        valortipoCrimen = tipoCrimen;
    }
    const std::string & gettipoCrimen() const
    {
        return valortipoCrimen;
    }

    //Funciones de Acceso para Nombres
    void setNombre( const std::string & nombre )
    {
        valorNombres = nombre;
    }
    const std::string & getNombre() const
    {
        return valorNombres;
    }

    //Funciones de Acceso para Primer Apellido
    void setApellido( const std::string & apellidos )
    {
        valorApellidos = apellidos;
    }
    const std::string & getApellido() const
    {
        return valorApellidos;
    }

    //Funciones de Acceso para Género
    void setelGenero(const std::string & genero)
    {
        valorgenero = genero;
    }
    const std::string & getgenero() const
    {
        return valorgenero;
    }

    //Funciones de Acceso para Edad
    void setedad(int edad)
    {
        valoredad = edad;
    }
    int getedad() const
    {
        return valoredad;
    }

    //Funciones de Acceso para Peso
    void setpeso(int peso)
    {
        valorpeso = peso;
    }
    int getpeso() const
    {
        return valorpeso;
    }

    //Funciones de Acceso para Altura
    void setaltura(int altura)
    {
        valoraltura = altura;
    }
    int getaltura() const
    {
        return valoraltura;
    }

    //Funciones de Acceso para Dirección Calle
    void setdireccionCompleta(const std::string & direccionCompleta)
    {
        valordireccionCompleta = direccionCompleta;
    }
    const std::string & getdireccionCompleta() const
    {
        return valordireccionCompleta;
    }

    //Funciones de Acceso para Lugar de Trabajo
    void setlugarTrabajo(const std::string & lugarTrabajo)
    {
        valorlugarTrabajo = lugarTrabajo;
    }
    const std::string & getlugarTrabajo() const
    {
        return valorlugarTrabajo;
    }

    //Funciones de Acceso para Color de Ojos
    void setcolorOjos(const std::string & cOjos)
    {
        valorcolorOjos = cOjos;
    }
    const std::string & getcolorOjos() const
    {
        return valorcolorOjos;
    }

    //Funciones de Acceso para Color de Piel
    void setNacionalidad(const std::string& nacionalidad)
    {
        valorNacionalidad = nacionalidad;
    }
    const std::string & getNacionalidad() const
    {
        return valorNacionalidad;
    }

    //Funciones de Acceso para Color de Cabello
    void setcolorCabello(const std::string& cCabello)
    {
        valorcolorCabello = cCabello;
    }
    const std::string & getcolorCabello() const
    {
        return valorcolorCabello;
    }

    //Funciones de Acceso para Huella Digital
    void sethuellaDigital(const std::string& hDigital)
    {
        valorhuellaDigital = hDigital;
    }
    const std::string & gethuellaDigital() const
    {
        return valorhuellaDigital;
    }

    //Funciones de Acceso para Fotografía
    void setfotografia(const std::string& foto)
    {
        valorfotografia = foto;
    }
    const std::string & getfotografia() const
    {
        return valorfotografia;
    }
};

    //Constructor del Criminal
Criminal::Criminal(int nSerie, std::string tipoCrimen,
             std::string nombre, std::string apellidos, std::string genero,
             int edad, int peso, int altura,
             std::string direccionCompleta, std::string lugarTrabajo,std::string nacionalidad,
             std::string cOjos,std::string cCabello,std::string hDigital,std::string foto){}
    //Finaliza Constructor de Criminal

//-----------------------------------------------

#endif
You need #include <string> header at the top of main.cpp
it's included in the #include <sstream> in the header
Topic archived. No new replies allowed.