Im writing to a Binary file. Having real difficulty. Not sure if I'm on the right track. Here is my code.
Code:
// Project 2.c : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
// ------------------- New types declared - Global types.-------------------
struct addr
{
char first_name[30];
char surname[40];
char address1[40];
char county[50];
char country[30];
int sex; // 1 for female, 0 for male
int active_member;
int member_num;
int end; // 1 for yes, 0 for no
};
//------------------ Global Variables -------------------------
FILE *fp;
// ----------------- Function prototypes ----------------------
int main(void);
void details(struct addr *, int); // Using pass by reference for structure.
void display_details(struct addr); // Display details on screen
void store_details(struct addr); // Stores structure to disk
void retrieve_details(struct addr *, int);
// ------------------------------------------------------------
int main(void)
{
struct addr member_details[100]; // Declare variable to use.
struct addr disk_details;
int i;
// Open file for writing - create file or blank it.
if((fp = fopen("store.bin","wb")) == NULL)
{
printf("Cannot open file \"store.bin\" for writing.....\n");
exit(1);
}
for (i = 0; i <= 100; i++) // Limited to 100 members for the time being.
{
details(&member_details[i], i); // Function call
store_details(member_details[i]);
}
for (i=0; i<=100; i++)
{
printf("Member number %d details:\n", i+1);
retrieve_details(&disk_details, i);
display_details(member_details[i]);
}
fclose(fp);
}
/* -----------------------------------------------------------------
Function to get and store the details of each member.
Called: details(struct addr *);
IN: struct addr *: Address of structure addr to store details in.
int : member number;
OUT: Filled structure.
---------------------------------------------------------------- */
void details(struct addr *member, int i)
{
//int i;
printf("Enter first name for member %d: ", i);
scanf("%s", member->first_name);
printf("Enter surname for member %d: ", i);
scanf("%s", member->surname);
printf("Enter the first line of address for member %d: ", i);
scanf("%s", member->address1);
printf("Enter county for member %d: ", i);
scanf("%s", member->county);
printf("Enter country for member %d: ", i);
scanf("%s", member->country);
printf("Is member %d active (1=Y/0=N): ", i);
scanf("%d", &member->active_member);
printf("Is member %d male or female (1=Y/0=N): ", i);
scanf("%d", &member->sex);
printf("End\? (1=Y/0=N); ");
scanf("%d",&member->end);
member->member_num = i;
printf("\n\n");
}
void display_details(struct addr member)
{
printf("\tFirst name = %s\n", member.first_name);
printf("\tSurname = %s\n", member.surname);
printf("\tAddress line 1 = %s\n", member.address1);
printf("\tCounty = %s\n", member.county);
printf("\tCountry = %s\n", member.country);
printf("\n\n");
}
void store_details(struct addr member)
{
fseek(fp, 0, SEEK_END);
// Write structure to file.
fwrite(&member, sizeof(struct addr), 1, fp);
}
void retrieve_details(struct addr *member, int num)
{
fseek(fp, (num * sizeof(struct addr)), SEEK_SET);
fread(member, sizeof(struct addr), 1, fp);
}