[C con Clase] Problema con clase

Agustín Cota Reguero clom2002 en yahoo.es
Jue Mayo 13 13:11:39 CEST 2010


Hola a todos. A ver si alguno puede echarme una mano con el siguiente problemilla. He creado dos clases DifracData y Difractograma en las cuales se han de guardar los elementos de un fichero que tiene pares de puntos de información. He creado algunas funciones para ellas y me encuentro con el siguiente problema. Cuado cargo la información del fichero en la clase siempre considera como si estuviese vacia y no lo entiendo. A ver si alguno me puede dar una idea de por que.

Aquí os pongo el codigo:

#ifndef DIFRACTOGRAMA_H_INCLUDED
#define DIFRACTOGRAMA_H_INCLUDED


class DifracData {

    public:

    DifracData(double angulo, int cuentas, DifracData* ant = NULL, DifracData* sig = NULL) :
        Angle(angulo) , PSD(cuentas) , Anterior(ant) , Siguiente(sig) {}

    double Angle;

    int PSD;

    DifracData* Anterior;

    DifracData* Siguiente;

    friend class Difractograma;
};

class Difractograma {
   private:

    int nDataElements;

    DifracData* ActualDato;

    public:

    Difractograma(int nelement = 0) : nDataElements(nelement) {}

    ~Difractograma();

    void CargaDatos(char* nombre_archivo);

    bool Vacia();

    void Siguiente();

    void Anterior();

    void Ultimo();

    void Primero();

    void InsertarAlFinal(double angulo, int cuentas);


};

#endif // DIFRACTOGRAMA_H_INCLUDED


#include "includes.h"

Difractograma::~Difractograma(){

}

bool Difractograma::Vacia(){
    return ActualDato == NULL;
}

void Difractograma::Siguiente(){
    if(ActualDato) ActualDato = ActualDato->Siguiente;
}

void Difractograma::Anterior(){
    if(ActualDato) ActualDato = ActualDato->Anterior;
}

void Difractograma::Ultimo(){
    while(ActualDato && ActualDato->Siguiente != NULL) Siguiente();
}

void Difractograma::Primero(){
    while(ActualDato && ActualDato->Anterior != NULL) Anterior();
}

void Difractograma::InsertarAlFinal(double angulo, int cuentas){
    DifracData* nuevo;

    if(Vacia()){MessageBox(NULL,"entre en vacio","Error",MB_OK);
        nuevo = new DifracData(angulo, cuentas);
        ActualDato = nuevo;
        nDataElements = 1;
    }else{
        Ultimo();
        nuevo = new DifracData(angulo, cuentas, ActualDato);
        nDataElements++;
    }
}

void Difractograma::CargaDatos(char* nombre_archivo){
    char linea[80];
    char numero[40],numero1[40];

    FILE* fichero = fopen(nombre_archivo,"r");

    if(fichero != NULL){
       while( !feof(fichero) ){

           char enter;

           fscanf(fichero, "%[^\n]", linea);
           fscanf(fichero, "%c", &enter);

           int i = 0,j =0;

           while(linea[i]!=','){
               numero[i] = linea[i];
               i++;
           }

           numero[i] = '\0';
           i++;

           while(linea[i]!=','){
               numero1[j] = linea[i];
               i++;
               j++;
           }

            numero1[j] = '\0';

            InsertarAlFinal(atof(numero),atoi(numero1));

            sprintf(linea,"Los valores leidos son Angulo = %lf y PSD = %d numero de elementos %d",ActualDato->Angle,ActualDato->PSD,nDataElements);
            Siguiente();

           MessageBox(NULL,linea,"Error",MB_OK);
           }
       }else MessageBox(NULL,"El fichero seleccionado no pudo cargarse","Error",MB_OK);

    fclose(fichero);
}




      
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100513/b26c085c/attachment.html>


Más información sobre la lista de distribución Cconclase