Je suis en cours d'exécution d'un programme avec 3 structures et ce que je fais en lecture/écriture dans le fichier binaire est le suivant:lecture/écriture d'une structure dans un fichier binaire
struct Medico
{
int Id_Doctor;
int Estado;
char Nombre[60];
char Clave_Acceso[20];
char Especialidad[40];
struct Medico *next;
};
typedef struct Medico *Medicazos;
typedef struct Medico Meds;
Medicazos Nuevo;
FILE *Archivaldo;
char especialida[40], password[20];
char nombre_doc[60];
int estado_doc, id_doc;
Archivaldo=fopen("md.dat", "rb");
fclose(Archivaldo);
if((Archivaldo=fopen("md.dat", "rb"))==NULL)
{
printf("No se pudo abrir el archivo de Medicos\n"); //couldnt open file msg
exit(1);
}
rewind(Archivaldo);
while(!feof(Archivaldo))
{
if(*Inicio != NULL) //read from file and write in struct
{
Nuevo = (Medicazos) malloc (sizeof(Meds)); //new=pointer
fread(&id_doc, sizeof(int), 1, Archivaldo);
fread(nombre_doc, sizeof(char), sizeof(nombre_doc), Archivaldo);
fread(password, sizeof(char), 20 , Archivaldo);
fread(especialida, sizeof(char), 40, Archivaldo);
fread(&estado_doc, sizeof(int), 1, Archivaldo);
Nuevo->Id_Doctor=id_doc; ///copies data in structure
strcpy(Nuevo -> Nombre , nombre_doc);
strcpy(Nuevo -> Clave_Acceso, password);
strcpy(Nuevo -> Especialidad, especialida);
Nuevo-> Estado = estado_doc;
printf("---------------------------------\n"); //display info
printf("ID: %d\n", id_doc);
printf("\nDoctor: ");
puts(nombre_doc);
printf("\nPassword: ");
puts(password);
printf("\nEspecialidad: ");
puts(especialida);
printf("\nEstado: ");
if(estado_doc==1)
puts("Activo\n");
else
puts("Inactivo\n");
Nuevo-> next = *Inicio;
*Inicio = Nuevo;
}
else
{
*Inicio = (Medicazos)malloc(sizeof(Meds));
fread(&id_doc, sizeof(int), 1, Archivaldo);
fread(nombre_doc, sizeof(char), sizeof(nombre_doc), Archivaldo);
fread(password, sizeof(char), 20 , Archivaldo);
fread(especialida, sizeof(char), 40, Archivaldo);
fread(&estado_doc, sizeof(int), 1, Archivaldo);
(*Inicio)->Id_Doctor=id_doc;
strcpy((*Inicio) -> Nombre , nombre_doc);
strcpy((*Inicio) -> Clave_Acceso, password);
strcpy((*Inicio) -> Especialidad, especialida);
(*Inicio)-> Estado = estado_doc;
printf("--------------------------------\n"); //display info
printf("ID: %d\n", id_doc);
printf("\nDoctor: ");
puts(nombre_doc);
printf("\nPassword: ");
puts(password);
printf("\nEspecialidad: ");
puts(especialida);
printf("\nEstado: ");
if(estado_doc==1)
puts("Activo\n");
else
puts("Inactivo\n");
(*Inicio) -> next = NULL;
}
}
fclose(Archivaldo);
Est-il possible de le faire simplifier cela?
EDIT: De plus, lorsque j'essaie d'afficher les fichiers, quelqu'un m'a mentionné de ne pas utiliser feof
pendant la lecture/écriture. Je ne me souviens pas pourquoi. Qu'est-ce qui pourrait être utilisé à la place?
Veuillez mettre en forme le code. – loxxy
Veuillez marquer vos questions à l'avenir avec la langue que vous utilisez. Je l'ai marqué avec C parce qu'il semble que vous n'utilisez que C. – birryree
Je pensais que je l'ai fait, je suis tellement désolé; btw chaque fois que je semble formater le code lorsque je poste la question, il ne semble pas être sur le format .. – drodri420