C/Visual C - consulta c

 
Vista:

consulta c

Publicado por Suricata (1 intervención) el 06/09/2006 20:17:30
Buenas, tengo una consulta con respecto a como trabajan algunas de las funciones de c.
Por un lado creo un archivo y almaceno registros, pero cuando quiero leerlo solo lee hasta una cierta parte y deja de leer. El tema es que controlo la cantidad que escribo con el metodo fwrite() y escribe la cantidad que le solicito, con lo cual calculo que el problema debe estar cuando leo, pero no veo el lugar

Adjunto el codigo
Muchas gracias

#include <stdio.h>
#include <stdlib.h>
#include <string>
using namespace std;

void obtenerCaracteres(long int valor, char caracteres[65])
{
int numero=0, i=0, aux;
long int semilla = 1000000000;
string codificacion;
bool primeraVez = true;

while (i<=9)
{
while (numero == 0 && primeraVez)
{
numero = (valor / semilla);
if (i!=0)
{
aux = valor/ (semilla * 10);
numero = numero - (aux * 10);
}
semilla = semilla/10;
++i;
}
if (!primeraVez)
{
aux = valor/ (semilla * 10);
numero = (valor / semilla) - (aux * 10);
semilla = semilla/10;
++i;
}
else
primeraVez = false;
switch (numero){
case 0: codificacion = "cero";
break;
case 1: codificacion = "uno";
break;
case 2: codificacion = "dos";
break;
case 3: codificacion = "tres";
break;
case 4: codificacion = "cuatro";
break;
case 5: codificacion = "cinco";
break;
case 6: codificacion = "seis";
break;
case 7: codificacion = "siete";
break;
case 8: codificacion = "ocho";
break;
case 9: codificacion = "nueve";
break;
}
// concateno las cadenas para formar el campo completo
strcat(caracteres, codificacion.c_str());
}
}
typedef struct {
long int clave;
char carac[65];
}reg;
int main()
{

// generar archivo
FILE *fp;

char *aux = new char[sizeof(reg)];
char *caracteres = new char[65];

int m =1;
reg registro;


/*fp = fopen("prueba2", "w");
for (int i=0; i < 120; i++)
{
// limpio las cadenas utilizadas
strncpy(aux, "\0", sizeof(reg) );
strncpy(caracteres, "\0", 65 );
strncpy(registro.carac, "\0", 65);
// El correcto es
// registro.clave = rand();
if (i < 10)
registro.clave = i + 50;
if (i < 30 && i >= 10)
registro.clave = i + 100;
if (i >= 30 && i<40)
registro.clave = i;
if (i >= 40 && i<60)
registro.clave = i+200;
if (i >= 60 && i<70)
{
registro.clave = i-40;
}
if (i >= 70 && i<80)
registro.clave = rand();
if (i >= 80 && i< 90)
{
registro.clave = m;
++m;
}
if (i>= 90 && i< 100)
registro.clave = i;
if (i>= 100 && i < 115) // rango 70 a 85
registro.clave = i - 30;
if (i>= 115)
registro.clave= rand() - 10000;


obtenerCaracteres(registro.clave, caracteres);

strcpy(registro.carac, caracteres);
memcpy((void*)aux, ®istro, sizeof(reg));
printf("la clave almacenada es: %ld\n", registro.clave);

if (fwrite((void*) aux, sizeof(reg), 1, fp) != 1)
{
fclose(fp);
return 4; // ERROR_ESCRITURA
}
fflush(fp);

}
fclose(fp);*/


// Lectura

int cant;
char *auxNuevo= new char[sizeof(reg) *10];
char *auxNew= new char[sizeof(long int) + 65];

fp = fopen("prueba2", "r");
for (int s =0; s < 120; s++)
{
cant = fread((void*) auxNuevo, (sizeof(reg)), 1, fp);
if (feof(fp)) return 2;
for (int i =0; i < sizeof(reg); i++)
auxNew[i] = auxNuevo[i];
memcpy(®istro, (void*) auxNew, sizeof(registro));
printf("la clave es: %ld\n", registro.clave);
printf("la clave es: %s\n", registro.carac);


}
// Libero la memoria alocada previamente
// delete []aux;
delete []caracteres;
delete []auxNuevo;
delete []auxNew;
fclose(fp);
return 1;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder