Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DeIMachine en 12 Diciembre 2015, 16:28 pm



Título: Problema con ficheros
Publicado por: DeIMachine en 12 Diciembre 2015, 16:28 pm
Hola a todos, estoy trabajando con ficheros y quiero que extraiga de un fichero de texto la fecha y el sexo de las personas, el fallo es que en cuando compilo me da solamente la fecha del primer elemento de la tabla todo el rato independientemente del valor de i en tFecha[ i ], debe ser algun fallo pequeño, os paso el código entero por partes, gracias de antemano:
MAIN:
Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include "gestionFicheros.h"
  4. #include "persona.h"
  5. using namespace std;
  6.  
  7. int main(){
  8.    int numDatos=676;
  9.    int tFechas[numDatos];
  10.    bool tSexo[numDatos];
  11.    leerDatosFormatoT01("Personas.txt",tFechas,tSexo,numDatos);
  12.    cout<<tFechas[3]<<endl;
  13.    return 0;
  14. }
  15.  
  16.  



Código
  1. gestionFicheros.cpp:
  2.  
  3. #include <iostream>
  4. #include <fstream>
  5. #include "persona.h"
  6. #include "gestionFicheros.h"
  7. using namespace std;
  8.  
  9. void leerDatosFormatoT01(const char nombre[],int tFechas[],bool tSexo[],int& numDatos){
  10.    ifstream f;
  11.    f.open(nombre);
  12.    if(f.is_open()){
  13.        for(int i=0;i<numDatos;i++){
  14.            int d,m,a;
  15.            bool sexo;
  16.            Persona T[numDatos];
  17.            f >> d >> m >> a >> sexo;
  18.            T[i]=definirPersona(d,m,a,sexo);
  19.            tFechas[i]=nacido(T[i]);
  20.            tSexo[i]=esMujer(T[i]);
  21.  
  22.        }
  23.        f.close();
  24.    }
  25.    else{
  26.        cerr<<"No se ha abierto el archivo " << nombre << endl;
  27.    }
  28. }
  29.  
  30.  
  31.  

persona.cpp:
Código
  1. #include "persona.h"
  2.  
  3. Persona definirPersona(int d, int m, int a, bool esMujer){
  4.    Persona p;
  5.    p.fecha=a*10000+m*100+d;
  6.    p.mujer=esMujer;
  7.    return p;
  8. }
  9.  
  10.  
  11. int nacido(Persona p){
  12.    return p.fecha;
  13. }
  14.  
  15. bool esMujer(Persona p){
  16.    return p.mujer;
  17. }
  18.  
  19.  

El programa lee un fichero const char nombre[] de estet tipo:
d m a sexo

por ejemplo:
20 01 1934 FALSE
20 11 1997 TRUE

Ejemplo de mi fallo con el main, cuando se supone que cada fecha tendría que ser diferente:
fecha(T[0])=19340120
fecha(T[1])=19340120
fecha(T[2])=19340120


Título: Re: Problema con ficheros
Publicado por: user-marcos en 12 Diciembre 2015, 17:42 pm
-Estas seguro que la posición es correcta de: Persona T[numDatos];


Título: Re: Problema con ficheros
Publicado por: DeIMachine en 12 Diciembre 2015, 23:06 pm
No lo estoy del todo jajaj  un amigo que me vio el código tambien me dijo que era una tonteria crear una tabla de nuevo en el bucle pero he cambiado el codigo y el error que me daba esta vez que lo ultimo que leia, el booleano que indicaba el sexo podia ser de caracter numerico (0,1) o alfanumerico(false,true). Hasta que no utilice el manipulador boolalpha no me funcionaba el programa ya que en el texto aparece true,false. Paso el codigo por aqui por si alguien le quiere echar un vistazo:
Código
  1. void leerDatosFormatoT01(const char nombre[],int tFechas[],bool tSexo[],int& numDatos){
  2.    ifstream f;
  3.    f.open(nombre);
  4.    if(f.is_open()){
  5.        int i=0;
  6.        while(!f.eof()){
  7.            int d,m,a;
  8.            bool sexo;
  9.            Persona T[numDatos];
  10.            f >> d >> m >> a >>boolalpha>>sexo; //IMPORTANTE:  BOOLALPHA INDICA QUE EL BOOLEANO VA A TENER UNA SALIDA ALFANUMERICA Y NO NUMERICA(0,1)
  11.            T[i]=definirPersona(d,m,a,sexo);
  12.            tFechas[i]=nacido(T[i]);
  13.            tSexo[i]=esMujer(T[i]);
  14.            i++;
  15.        }
  16.        numDatos=i;
  17.        f.close();
  18.    }
  19.    else{
  20.        cerr<<"No se ha abierto el archivo " << nombre << endl;
  21.    }
  22. }
  23.  
  24.  
  25.