elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Grabar estructura en archivo [lenguaje C] [Windows 7]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Grabar estructura en archivo [lenguaje C] [Windows 7]  (Leído 6,220 veces)
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Grabar estructura en archivo [lenguaje C] [Windows 7]
« Respuesta #10 en: 14 Marzo 2015, 03:34 am »

Lo último es un inconveniente con el bucle while, siempre me duplica el último dato.
El problema se debe a que estas utilizando feof para controlar el bucle de lectura y con ello se realiza una iteración de mas:
Código
  1. printf( "\n\n Listado completo\n" );
  2. while( !feof(ptrEst) ){
  3.   fread(&est, sizeof(est), 1, ptrEst);
  4.   printf( " %d - %s \n", est.matricula, est.nombre );
  5. }
La solución manteniendo el uso de la función feof ya te la dio BloodSharp, solo ten cuidado con el bucle ya que son dos expresiones separadas por el operador condicional ",".

Otra opción consiste en olvidarse de feof, temas relacionados con ello los puedes consultar mediante el motor de búsqueda de los foros, lo usual salvo casos excepcionales es, en lugar del uso de la bendita función, utilizar el valor de retorno de la función en turno. En tu caso basta con:
Código
  1. puts("Listado completo:");
  2. while (fread(&est, sizeof est, 1, ptrEst) == 1)
  3.   printf(" %d - %s \n", est.matricula, est.nombre);

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: Grabar estructura en archivo [lenguaje C] [Windows 7]
« Respuesta #11 en: 14 Marzo 2015, 04:00 am »

Hola rir3760.
Ahora si funciona correctamente, sólo que la primer parte quedo de esta manera (lo copié de este foro).-

Código
  1. ......................
  2. ......................
  3. long tam;
  4. ......................
  5. ......................
  6. tam=sizeof(struct registro);
  7. fseek(ptrEst, 0, SEEK_END);
  8. ultimaMatricula=ftell(ptrEst)/tam;
  9. est.matricula = ultimaMatricula+1;
  10.  
  11. printf( "\n Matricula......: %d",  est.matricula);
  12.  
Sólo una cosita más, me podrías decir el significado de == 1, debo interpretar que si es cero termina el bucle, no se.-

Saludos.
Daniel


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Grabar estructura en archivo [lenguaje C] [Windows 7]
« Respuesta #12 en: 14 Marzo 2015, 04:25 am »

Sólo una cosita más, me podrías decir el significado de == 1, debo interpretar que si es cero termina el bucle
Correcto. La función fread retorna el numero de elementos leídos con éxito y este valor sera igual o menor al tercer argumento de la función (en tu caso y en resumen 1 ==> lectura exitosa, 0 ==> error o fin de archivo).

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines