Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/03/2015, 04:50
M01535
 
Fecha de Ingreso: marzo-2015
Mensajes: 3
Antigüedad: 9 años, 1 mes
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