Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema en C con fread y fwrite

Estas en el tema de Problema en C con fread y fwrite en el foro de C/C++ en Foros del Web. Buenos dias a tod@s, actualmente estoy aprendiendo a programar en C, mas concretamente ahora mismo estoy liado con las ordenes fwrite y fread que me ...
  #1 (permalink)  
Antiguo 31/03/2015, 04:50
 
Fecha de Ingreso: marzo-2015
Mensajes: 3
Antigüedad: 9 años
Puntos: 0
Problema en C con fread y fwrite

Buenos dias a tod@s, actualmente estoy aprendiendo a programar en C, mas concretamente ahora mismo estoy liado con las ordenes fwrite y fread que me están dando bastantes dolores de cabeza xD.
Bueno expongo mis problemas, anteriormente tuve que hacer este ejercicio: Una agenda que maneje los siguientes datos: nombre, dirección, tlf móvil, email, y día, mes y año de nacimiento (estos tres últimos datos deberán ser números enteros cortos). Deberá tener capacidad para 100 fichas. Se deberá poder añadir un dato nuevo, visualizar los nombres de las fichas existentes, o mostrar todos los datos de una persona (se preguntará al usuario cual es el nombre de esa persona que quiere visualizar). Al empezar el programa, leerá los datos de un fichero llamado "agenda.dat" (si existe). Al terminar, guardará todos los datos en ese fichero.
Pues bien, en un ejercicio actual me piden que modifique este anterior sustituyendo e introduciendo un fread y fwrite para leer y escribir todos los datos en el fichero, pero por mas vueltas que le he estado dando no soy capaz de hacer que funcione correctamente, por aqui os dejo las partes del código donde hay que sustituir e introducir un fread y fwrite:

fread
Código:
Agenda=fopen("agenda.dat","rt");
while(!feof(Agenda)){
    fgets(Buffer,200,Agenda);
    if(feof(Agenda)) break;
    if(strlen(Buffer)>0) Buffer[strlen(Buffer)-1]='\0';
    strcpy(Datos[X].Name,Buffer);

    fgets(Buffer,200,Agenda);
    if(feof(Agenda)) break;
    if(strlen(Buffer)>0) Buffer[strlen(Buffer)-1]='\0';
    strcpy(Datos[X].Adress,Buffer);

    fgets(Buffer,200,Agenda);
    if(feof(Agenda)) break;
    if(strlen(Buffer)>0) Buffer[strlen(Buffer)-1]='\0';
    strcpy(Datos[X].Movil,Buffer);

    fgets(Buffer,200,Agenda);
    if(feof(Agenda)) break;
    if(strlen(Buffer)>0) Buffer[strlen(Buffer)-1]='\0';
    strcpy(Datos[X].Email,Buffer);

    fgets(Buffer,200,Agenda);
    if(feof(Agenda)) break;
    sscanf(Buffer,"%d",&Datos[X].Day);

    fgets(Buffer,200,Agenda);
    if(feof(Agenda)) break;
    sscanf(Buffer,"%d",&Datos[X].Month);

    fgets(Buffer,200,Agenda);
    if(feof(Agenda)) break;
    sscanf(Buffer,"%d",&Datos[X].Year);
    Algodon=1;
    X++;
}
fclose(Agenda);
fwrite
Código:
Agenda=fopen("agenda.dat","wt");
for(Y=0;Y<X;Y++){
    fprintf(Agenda,"%s\n",Datos[Y].Name);
    fprintf(Agenda,"%s\n",Datos[Y].Adress);
    fprintf(Agenda,"%s\n",Datos[Y].Movil);
    fprintf(Agenda,"%s\n",Datos[Y].Email);
    fprintf(Agenda,"%d\n",Datos[Y].Day);
    fprintf(Agenda,"%d\n",Datos[Y].Month);
    fprintf(Agenda,"%d\n",Datos[Y].Year);
}
fclose(Agenda);
Muchas gracias y un saludo
  #2 (permalink)  
Antiguo 31/03/2015, 05:29
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Problema en C con fread y fwrite

¿Cómo es la estructura de "Datos"?
¿Cómo guardas los datos en el archivo?

Y, bueno, "no me funciona" no es que sea algo que aporte mucho... ¿qué problema tienes? ¿qué funciona mal? ¿te duplica algún registro o... no lee nada?

Si facilitas un ejemplo (y más si no es compilable) deberías proporcionar la mayor cantidad de información posible... ponlo fácil para que la gente se anime a ayudarte.

Un saludo.
  #3 (permalink)  
Antiguo 31/03/2015, 06:11
 
Fecha de Ingreso: marzo-2015
Mensajes: 3
Antigüedad: 9 años
Puntos: 0
Respuesta: Problema en C con fread y fwrite

Si, pido disculpas, no quería hacer tampoco el post demasiado largo y aburrido xD. Bueno principalmente el problema es que al introducir un fread y fwrite no lee ni guarda correctamente en el fichero.
Este es el programa funcionando correctamente (sin utilizar fread ni fwrite):

Código:
#include <stdio.h>
#include <string.h>

int main(){

FILE* Agenda;
struct{
    char Name[100],Adress[100],Email[100],Movil[13];
    unsigned short int Day,Month,Year;
}Datos[100];
char Buffer[200],Buscar[200];
int X=0,Y,Menu,Algodon=0;

//LEER DATOS DEL FICHERO
Agenda=fopen("agenda.dat","rt");
while(!feof(Agenda)){
    fgets(Buffer,200,Agenda);
    if(feof(Agenda)) break;
    if(strlen(Buffer)>0) Buffer[strlen(Buffer)-1]='\0';
    strcpy(Datos[X].Name,Buffer);

    fgets(Buffer,200,Agenda);
    if(feof(Agenda)) break;
    if(strlen(Buffer)>0) Buffer[strlen(Buffer)-1]='\0';
    strcpy(Datos[X].Adress,Buffer);

    fgets(Buffer,200,Agenda);
    if(feof(Agenda)) break;
    if(strlen(Buffer)>0) Buffer[strlen(Buffer)-1]='\0';
    strcpy(Datos[X].Movil,Buffer);

    fgets(Buffer,200,Agenda);
    if(feof(Agenda)) break;
    if(strlen(Buffer)>0) Buffer[strlen(Buffer)-1]='\0';
    strcpy(Datos[X].Email,Buffer);

    fgets(Buffer,200,Agenda);
    if(feof(Agenda)) break;
    sscanf(Buffer,"%d",&Datos[X].Day);

    fgets(Buffer,200,Agenda);
    if(feof(Agenda)) break;
    sscanf(Buffer,"%d",&Datos[X].Month);

    fgets(Buffer,200,Agenda);
    if(feof(Agenda)) break;
    sscanf(Buffer,"%d",&Datos[X].Year);
    Algodon=1;
    X++;
}
fclose(Agenda);
if(Algodon==0){
    printf("No hay datos que leer...\n\n");
}
else if(Algodon==1){
    printf("Datos leidos...\n\n");
}

do{
    printf("1 - Introducir nuevo dato\n2 - Ver todos los nombres de los datos\n3 - Buscar\n0 - Salir\nQue desea hacer?: ");
    fgets(Buffer,sizeof(Buffer),stdin);
    sscanf(Buffer,"%d",&Menu);

    switch(Menu){
    //INGRESAR NUEVO DATO
    case 1:
    printf("\n\nNUEVO DATO:\nIngrese el nombre: ");
    fgets(Datos[X].Name,sizeof(Datos[X].Name),stdin);
    Datos[X].Name[strlen(Datos[X].Name)-1]='\0';

    printf("Ingrese la ciudad: ");
    fgets(Datos[X].Adress,sizeof(Datos[X].Adress),stdin);
    Datos[X].Adress[strlen(Datos[X].Adress)-1]='\0';

    printf("Ingrese el numero de movil: ");
    fgets(Datos[X].Movil,sizeof(Datos[X].Movil),stdin);
    Datos[X].Movil[strlen(Datos[X].Movil)-1]='\0';

    printf("Ingrese el email: ");
    fgets(Datos[X].Email,sizeof(Datos[X].Email),stdin);
    Datos[X].Email[strlen(Datos[X].Email)-1]='\0';

    printf("Ingrese el dia de nacimiento: ");
    fgets(Buffer,sizeof(Buffer),stdin);
    sscanf(Buffer,"%d",&Datos[X].Day);

    printf("Ingrese el mes de nacimiento: ");
    fgets(Buffer,sizeof(Buffer),stdin);
    sscanf(Buffer,"%d",&Datos[X].Month);

    printf("Ingrese su year de nacimiento: ");
    fgets(Buffer,sizeof(Buffer),stdin);
    sscanf(Buffer,"%d",&Datos[X].Year);
    X++;
    break;

    //MOSTRAR LOS NOMBRES DE TODOS LOS DATOS
    case 2:
        if(X==0){
            printf("\n\nNo hay datos que mostrar\n\n");
            break;
        }

    printf("\n\nEstos son los nombres de todos los datos:\n");
    for(Y=0;Y<X;Y++){
        printf("%d - %s\n",Y,Datos[Y].Name);
    }
    printf("\n");
        break;

    //BUSCAR DATO POR NOMBRE
    case 3:
        printf("\n\nIntroduzca el nombre del contacto que desea buscar: ");
        fgets(Buscar,sizeof(Buscar),stdin);
        Buscar[strlen(Buscar)-1]='\0';
        Algodon=0;

        for(Y=0;Y<X;Y++){
            if(strcmp(Buscar,Datos[Y].Name)==0){
                printf("\nSe ha encontrado este/os resultado/s:\n");
                printf("Name: %s\nAdress: %s\nPhone: %s\nEmail: %s\nBorn in: %d-%d-%d\n\n",Datos[Y].Name,Datos[Y].Adress,Datos[Y].Movil,Datos[Y].Email,Datos[Y].Day,Datos[Y].Month,Datos[Y].Year);
                Algodon=1;
            }
        }
        if(Algodon==0){
            printf("\nNo se han encontrado resultados...\n\n");
        }
    }
}while(Menu!=0);

//ESCRIBIR LOS DATOS EN EL FICHERO
Agenda=fopen("agenda.dat","wt");
for(Y=0;Y<X;Y++){
    fprintf(Agenda,"%s\n",Datos[Y].Name);
    fprintf(Agenda,"%s\n",Datos[Y].Adress);
    fprintf(Agenda,"%s\n",Datos[Y].Movil);
    fprintf(Agenda,"%s\n",Datos[Y].Email);
    fprintf(Agenda,"%d\n",Datos[Y].Day);
    fprintf(Agenda,"%d\n",Datos[Y].Month);
    fprintf(Agenda,"%d\n",Datos[Y].Year);
}
fclose(Agenda);

printf("\nSaliendo...");

return 0;
}
El problema es que no consigo sustituir las partes que puse en el mensaje anterior por un fread y un fwrite correctamente para que el programa siga cumpliendo la misma funcion.
Al iniciar el programa se deben leer los datos del fichero y guardarlos en un struct llevando tambien la cuenta de cuantos datos se han guardado utilizando la variable X para posteriormente poder guardar mas datos y que no se guarden unos encima de otros, no se como hacer para que X lleve la cuenta de los datos utilizando fread.
Y al finalizar el programa a la hora de guardar los datos se guardan todos en la misma linea muy separados unos de otros con muchos simbolos al final de este.
Siento no poder explicarme mejor pero es que estas ordenes me tienen completamente perdido ya que no consigo dominar fread y fwrite.

Muchas gracias y un saludo.
  #4 (permalink)  
Antiguo 31/03/2015, 07:10
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Problema en C con fread y fwrite

Código C:
Ver original
  1. if(strlen(Buffer)>0) Buffer[strlen(Buffer)-1]='\0';

strlen() tiene internamente un contador... al pasarle un puntero empieza a recorrerlo hasta que encuentra un caracter nulo ('\0'), incrementando su contador interno por el camino. Una vez localizado este carácter devuelve el valor del contador.

Dicho esto, Buffer[strlen(Buffer)-1]='\0' va a eliminar SIEMPRE el último caracter de la secuencia leída. Es decir, si tenías 'HOLA\0' te vas a quedar con 'HOL\0'. No entiendo la utilidad de esa línea.

Y, por cierto, aquí te sucede lo mismo:

Código C:
Ver original
  1. fgets(Datos[X].Name,sizeof(Datos[X].Name),stdin);
  2. Datos[X].Name[strlen(Datos[X].Name)-1]='\0';

Seguimos...

Código C:
Ver original
  1. while(!feof(Agenda)){
  2.     // ...
  3.     if(feof(Agenda)) break;
  4.     // ...
  5.     if(feof(Agenda)) break;
  6.     // ...
  7.     if(feof(Agenda)) break;
  8.     // ...
  9.     if(feof(Agenda)) break;
  10.     // ...
  11.     if(feof(Agenda)) break;
  12.     // ...
  13.     if(feof(Agenda)) break;
  14.     // ...
  15.     if(feof(Agenda)) break;
  16. }

la condición del "while" no va a fallar nunca porque feof() no se actualiza hasta que no realizas una lectura fallida... y entre el último feof() del bucle y la condición del while no hay ningúna operación sobre el fichero...

puedes dejarlo como

Código C:
Ver original
  1. while( 1 )
  2. {
  3.   // ...
  4. }

o así

Código C:
Ver original
  1. do
  2. {
  3.     // ...
  4.     if(feof(Agenda)) break;
  5.     // ...
  6.     if(feof(Agenda)) break;
  7.     // ...
  8.     if(feof(Agenda)) break;
  9.     // ...
  10.     if(feof(Agenda)) break;
  11.     // ...
  12.     if(feof(Agenda)) break;
  13.     // ...
  14.     if(feof(Agenda)) break;
  15.     // ...
  16.     // if(feof(Agenda)) break; <-- comentado
  17. } while( !feof( ) );

más que nada porque la condición del while, tal y como está el código, no va a devolver false en la vida.

Código C:
Ver original
  1. fgets(Buffer,200,Agenda);
  2. if(feof(Agenda)) break;
  3. if(strlen(Buffer)>0) Buffer[strlen(Buffer)-1]='\0';
  4. strcpy(Datos[X].Name,Buffer);

No se si te has dado cuenta, pero te puedes ahorrar el uso de "Buffer"... primero haces una copia del fichero a "Buffer" y después copias ese mismo contenido de "Buffer" a la estructura "Datos"... ¿Por qué no haces una copia directa a "Datos"?

Algo así:

Código C:
Ver original
  1. fgets(Datos[X].Name,200,Agenda);
  2. if(feof(Agenda)) break;

Por otro lado, no se si te has dado cuenta, pero "Buffer" tiene tamaño 200 y "Name", "Address" y "Email" tienen tamaño 100... si editas el archivo a mano y aumentas la longitud de uno de esos campos por encima de 100 vas a pisar memoria... para evitar eso puedes valerte de "sizeof"

Código C:
Ver original
  1. fgets(Datos[X].Name, sizeof(Datos[0].Name), Agenda );
  2. if(feof(Agenda)) break;

Así te evitas el desbordamiento del buffer.

Otra cosilla: dado que utilizas 'X' para controlar el número máximo de elementos... "Algodon" es otra variable que te puedes ahorrar... básicamente cambia el if por:

Código C:
Ver original
  1. if( X == 0 ){
  2.     printf("No hay datos que leer...\n\n");
  3. }

Y listo.

Y, bueno, entiendo que este programa te funciona... ¿Qué problemas tienes al cambiar fgets por fread???
  #5 (permalink)  
Antiguo 31/03/2015, 08:45
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Problema en C con fread y fwrite

Que maquina ere eferion joe jajaja
  #6 (permalink)  
Antiguo 31/03/2015, 09:46
 
Fecha de Ingreso: marzo-2015
Mensajes: 3
Antigüedad: 9 años
Puntos: 0
Respuesta: Problema en C con fread y fwrite

Wow, muchas gracias por tu respuesta y tu tiempo, he estado leyendo con atención lo que me comentaste y a ver te comento un poco algunas cosas...

El Buffer[strlen(Buffer)-1]='\0' lo utilicé porque en el fichero los datos están separados por un salto de linea entonces me interesa quitarlos y luego a la hora de escribir en el struct lo pongo tambien porque fgets me genera un salto de linea.

El ciclo while tienes razón, no iba a fallar jamás, muchas gracias por tu ayuda.

El buffer es cierto que lo pude eliminar de las partes donde leo una string, quedando asi:
Código:
fgets(Datos[X].Name,sizeof(Datos[X].Name),Agenda);
    if(strlen(Datos[X].Name)>0) Datos[X].Name[strlen(Datos[X].Name)-1]='\0';
    if(feof(Agenda)) break;
Pero cuando leo los valores int probé a ponerlo de este modo:
Código:
sscanf(stdin,"%d",&Datos[X].Day);
if(feof(Agenda)) break;
Y no funciona porque al leerlos al principio del programa me los transforma en 0 el dia, mes y año, tanto en el programa como en el fichero, por lo que lo tuve que dejar como estaba, utilizando Buffer:
Código:
fgets(Buffer,200,Agenda);
sscanf(Buffer,"%d",&Datos[X].Day);
if(feof(Agenda)) break;
El desbordamiento de buffer ya lo corregí y la variable Algodon la cambié por la variable X, aunque no la pude eliminar del todo porque posteriormente en el programa tengo que hacer otro uso de la cariable Algodon donde no veo posibilidad de eliminarla.

Muchas gracias por todos tus consejos, rapidez de respuesta y por ayudarme a mejorar como programador, valoro tu tiempo y habilidad.

Ahora bien, la gran duda que me asalta xD, en el momento de leer del fichero y escribir en el finalmente, hago uso de fgets y fprintf, pero lo que tengo que intentar es sustituir esas ordenes por fread y fwrite, lo cual, a pesar de todos mis intentos no he conseguido aun... xD

Y bueno, este es el código de uno de mis intentos inutiles de usar fread y fwrite a la hora de leer y escribir los datos en el fichero:
Código:
#include <stdio.h>
#include <string.h>

int main(){

FILE* Agenda;
struct{
    char Name[100],Adress[100],Email[100],Movil[13];
    unsigned short int Day,Month,Year;
}Datos[100];
char Buffer[200],Buscar[200];
int X=0,Y,Menu,Algodon=0;

//LEER DATOS DEL FICHERO
Agenda=fopen("agenda.dat","rb");
    fread(&Datos,sizeof(Agenda),1,Agenda);
    X++;
fclose(Agenda);
if(X==0){
    printf("No hay datos que leer...\n\n");
}
else{
    printf("Datos leidos...\n\n");
}

do{
    printf("1 - Introducir nuevo dato\n2 - Ver todos los nombres de los datos\n3 - Buscar\n0 - Salir\nQue desea hacer?: ");
    fgets(Buffer,sizeof(Buffer),stdin);
    sscanf(Buffer,"%d",&Menu);

    switch(Menu){
    //INGRESAR NUEVO DATO
    case 1:
    printf("\n\nNUEVO DATO:\nIngrese el nombre: ");
    fgets(Datos[X].Name,sizeof(Datos[X].Name),stdin);
    Datos[X].Name[strlen(Datos[X].Name)-1]='\0';

    printf("Ingrese la ciudad: ");
    fgets(Datos[X].Adress,sizeof(Datos[X].Adress),stdin);
    Datos[X].Adress[strlen(Datos[X].Adress)-1]='\0';

    printf("Ingrese el numero de movil: ");
    fgets(Datos[X].Movil,sizeof(Datos[X].Movil),stdin);
    Datos[X].Movil[strlen(Datos[X].Movil)-1]='\0';

    printf("Ingrese el email: ");
    fgets(Datos[X].Email,sizeof(Datos[X].Email),stdin);
    Datos[X].Email[strlen(Datos[X].Email)-1]='\0';

    printf("Ingrese el dia de nacimiento: ");
    fgets(Buffer,sizeof(Buffer),stdin);
    sscanf(Buffer,"%d",&Datos[X].Day);

    printf("Ingrese el mes de nacimiento: ");
    fgets(Buffer,sizeof(Buffer),stdin);
    sscanf(Buffer,"%d",&Datos[X].Month);

    printf("Ingrese su year de nacimiento: ");
    fgets(Buffer,sizeof(Buffer),stdin);
    sscanf(Buffer,"%d",&Datos[X].Year);
    X++;
    break;

    //MOSTRAR LOS NOMBRES DE TODOS LOS DATOS
    case 2:
        if(X==0){
            printf("\n\nNo hay datos que mostrar\n\n");
            break;
        }

    printf("\n\nEstos son los nombres de todos los datos:\n");
    for(Y=0;Y<X;Y++){
        printf("%d - %s\n",Y,Datos[Y].Name);
    }
    printf("\n");
        break;

    //BUSCAR DATO POR NOMBRE
    case 3:
        printf("\n\nIntroduzca el nombre del contacto que desea buscar: ");
        fgets(Buscar,sizeof(Buscar),stdin);
        Buscar[strlen(Buscar)-1]='\0';
        Algodon=0;

        for(Y=0;Y<X;Y++){
            if(strcmp(Buscar,Datos[Y].Name)==0){
                printf("\nSe ha encontrado este/os resultado/s:\n");
                printf("Name: %s\nAdress: %s\nPhone: %s\nEmail: %s\nBorn in: %d-%d-%d\n\n",Datos[Y].Name,Datos[Y].Adress,Datos[Y].Movil,Datos[Y].Email,Datos[Y].Day,Datos[Y].Month,Datos[Y].Year);
                Algodon=1;
            }
        }
        if(Algodon==0){
            printf("\nNo se han encontrado resultados...\n\n");
        }
    }
}while(Menu!=0);

//ESCRIBIR LOS DATOS EN EL FICHERO
Agenda=fopen("agenda.dat","wb");
fwrite(&Datos,sizeof(Datos),1,Agenda);
fclose(Agenda);

printf("\nSaliendo...");
getchar();
return 0;
}

Última edición por M01535; 31/03/2015 a las 09:52
  #7 (permalink)  
Antiguo 01/04/2015, 00:15
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Problema en C con fread y fwrite

Código C:
Ver original
  1. fread(&Datos,sizeof(Agenda),1,Agenda);

¿Y que tal?

Código C:
Ver original
  1. fread(&Datos,sizeof(Datos),1,Agenda);

"Agenda" es un puntero, luego "sizeof(Agenda)" te va a devolver el tamaño que ocupa en memoria un puntero... es decir, seguramente 32 bits. Y esto va a ser así para cualquier puntero... todos los punteors ocupan lo mismo en memoria, ya que un puntero no es más que una referencia a otra posición de la memoria... además, la cantidad de datos a leer no va a venir determinada por "Agenda", sino por "Datos".

Con eso deberías ser capaz de leer el fichero... pero no vas a ser capaz de identificar cuántos elementos hay... Al guardar te vas a limitar a volcar en el fichero el contenido de la memoria de "Datos"... pero "Datos" no tiene nada que te permita saber cuántos elementos hay en la agenda.

Para solucionar este inconveniente tienes varias opciones:

1. Al empezar el programa, reinicias la memoria de "Datos", es decir, pones todos sus bytes a 0. ¿Para qué? Pues para que los registros que no tengan datos válidos no tengan basura. Dado que todos los registros van a estar consecutivos, basta con encontrar el primer registro con, por ejemplo, el nombre vacío para saber dónde termina la lista.

Resetear la memoria puede ser tan sencillo como:

Código C:
Ver original
  1. memset( &Datos, 0, sizeof(Datos) );

2. Modificar "Datos" para que pueda almacenar una variable que indique el número de elementos:

Código C:
Ver original
  1. struct Registro
  2. {
  3.     char Name[100],Adress[100],Email[100],Movil[13];
  4.     unsigned short int Day,Month,Year;
  5. };
  6.  
  7. struct Datos
  8. {
  9.   struct Registro Entradas[100];
  10.   int numEntradas;
  11. };

Con esta opción tienes que modificar todos los accesos a "Datos", pero ahí tendrás, en numEntradas, un valor que te indicará cuántos elementos estás almacenando en "Datos".

3. Hacer una lectura por pasos tal y como estabas haciendo con fgets. Una forma puede ser guardar cada Datos[x] en cada pasada:

Código C:
Ver original
  1. fwrite( &Datos[x], sizeof(Datos[0]), 1, Agenda);

Y la operación equivalente para leer... en este caso te basta con comprobar "feof()" después de cada lectura para saber si el último registro se ha leído correctamente o no.

Un saludo.

Etiquetas: funcion, fwrite, int, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:28.