Intereting Posts
Когда мне нужна динамическая память? C: Каково использование «extern» в файлах заголовков? Почему я получаю segfault при смене подписи основного? Как получить адрес указателя базового стека C динамически printf double, без потери точности и без конечных нhive Как использовать таймеры в драйверах устройств ядра Linux? Как жить streamовым видео с помощью программы C. Какой должен быть ответ HTTP? Как я могу использовать закодированную кодировку, если это возможно? Понимание команды fork () Posix API Вызов SHGetSetSettings из Delphi как запустить java-программу из программы ac? Петля над 256 значениями с использованием 8-разрядной целочисленной переменной без знака в качестве счетчика Рекурсивная факториальная программа в C зависает при выполнении Проблемы с доступом к структуре Шифрование в c lang. и расшифровка в c # Использование scanf для ввода пользовательского ввода

Чтение / запись структуры в двоичный файл

Я запускаю программу с тремя структурами и что я делаю для чтения / записи в двоичном файле:

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); 

Есть ли способ упростить это?

EDIT : Кроме того, когда я пытаюсь отобразить файлы, кто-то сказал мне, чтобы я не использовал feof во время чтения / записи. Я не помню, почему. Что можно использовать вместо этого?

Я предполагаю, что ваша структура выглядит следующим образом:

 struct Medicazos { char Nombre[60]; char Clave_Acceso[20]; char Especialidad[40]; int Id_Doctor; int Estado; } 

Вы можете читать / писать / копировать этого парня как единое целое. Нет необходимости делать поэтапный доступ, пока вы не будете готовы фактически использовать значения.

 struct Medicazos m = {"Bob", "Password", "Feet", 123, 456}; FILE* f = fopen(...); fwrite(&m, sizeof(struct Medicazos), 1, f); 

И то же (но обратное) для fread .

(Кстати, ваши заглавные имена переменных убивают меня.)