[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