i ended up doing it woithout that function. nov ive got a bigger issue,im trying to make a database of patients and i am working on writing 2 of 8 of the functions in the menu. displaypatients is supposed to display all the info for the patients 1 by 1, and addpatient is supposed to add a patient to an array of patientstructs in the file. i currently can add one patient, then display him, that works. but if i try to add another patient, the first gets all messed up. i believe the fault lies with my fwrite function wich is marked with a /**/ before it:
#include "iostream"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "process.h"
#define maxpatients 8
using namespace std;
void main();
struct namestruct
{
char firstName[32];
char middleI;
char lastName[32];
};
struct addressstruct
{
char streetAddress[32];
char city[32];
char state[3];
int zipcode;
};
struct locationstruct
{
int numFloor;
int numRoom;
unsigned char subLocation;
};
struct geninfostruct
{
addressstruct address;
char phoneNumber[12];
};
struct insuranceinfostruct
{
char nameCarrier[32];
geninfostruct insurancegeninfo;
float deductable;
};
struct datestruct
{
int day;
int month;
int year;
};
struct patientstruct
{
namestruct namepatient;
int age;
geninfostruct geninfopatient;
insuranceinfostruct insurence;
datestruct dischargedate;
locationstruct locationpatient;
char information[1024];
};
char menu()
{
char option1;
do
{
system("cls");
printf("press a coresponding key and then press enter to choose an option:\n1. open a file\n2. write database to file\n3. display patients\n4. find a patient\n5. add a patient\n6. delete a patient\n7. move a patient\n8.print out patients by discharge date\n");
option1 = getchar();
}
while (option1<'1' || option1 > '7');
fflush(stdin);
return option1;
}
void addpatient(patientstruct (*patientstructpointer)[maxpatients], int (*count)=0)
{
int numread;
char yesno;
FILE *fp;
fp=fopen("c:\\patientdirectory.txt","r");
if(fp==NULL)
{
printf("file not found. create one?y/n");
fflush(stdin);
do
{
// scanf_s("%c",&yesno);
cin>>yesno;
switch(yesno)
{
case 'y':
break;
case 'n':
main();
break;
default:
printf("please enter y for yes or n for no and press enter");
break;
}
}while(yesno!='y');
}
else
{
while (!feof(fp))
{
numread = fread((patientstructpointer)[*count],sizeof(*patientstructpointer),1,fp);
(*count)++;
}
}
system("cls");
fflush(stdin);
printf("\nEnter the patient's first name\n");
gets_s((*patientstructpointer)[*count].namepatient.firstName);
fflush(stdin);
printf("\nEnter the patient's middle initial\n");
(*patientstructpointer)[*count].namepatient.middleI=getchar();
fflush(stdin);
printf("\nEnter the patient's last name\n");
gets_s((*patientstructpointer)[*count].namepatient.firstName);
fflush(stdin);
printf("\nEnter the patient's age\n");
scanf_s("%d",&(*patientstructpointer)[*count].age);
fflush(stdin);
printf("\nEnter the patient's state of residence\n");
gets_s((*patientstructpointer)[*count].geninfopatient.address.state);
printf("\nEnter the patient's city of residence\n");
gets_s((*patientstructpointer)[*count].geninfopatient.address.city);
fflush(stdin);
printf("\nEnter the patient's zipcode of residence\n");
scanf_s("%d",&(*patientstructpointer)[*count].geninfopatient.address.zipcode);
fflush(stdin);
printf("\nEnter the patient's street address of residence\n");
gets_s((*patientstructpointer)[*count].geninfopatient.address.streetAddress);
fflush(stdin);
printf("\nEnter the patient's phone number\n");
gets_s((*patientstructpointer)[*count].geninfopatient.phoneNumber);
fflush(stdin);
printf("\nEnter the patient's insurance carrier's name\n");
gets_s((*patientstructpointer)[*count].insurence.nameCarrier);
fflush(stdin);
printf("\nEnter the patient's insurance carrier's state\n");
gets_s((*patientstructpointer)[*count].insurence.insurancegeninfo.address.state);
fflush(stdin);
printf("\nEnter the patient's insurance carrier's city\n");
gets_s((*patientstructpointer)[*count].insurence.insurancegeninfo.address.city);
fflush(stdin);
printf("\nEnter the patient's insurance carrier's zipcode\n");
scanf_s("%d",&(*patientstructpointer)[*count].insurence.insurancegeninfo.address.zipcode);
fflush(stdin);
printf("\nEnter the patient's insurance carrier's street address\n");
gets_s((*patientstructpointer)[*count].insurence.insurancegeninfo.address.streetAddress);
fflush(stdin);
printf("\nEnter the patient's insurance carrier's deductable\n");
scanf_s("%f",&(*patientstructpointer)[*count].insurence.deductable);
fflush(stdin);
printf("\nEnter the patient's year of discharge\n");
scanf_s("%d",&(*patientstructpointer)[*count].dischargedate.year);
fflush(stdin);
printf("\nEnter the patient's month of discharge\n");
scanf_s("%d",&(*patientstructpointer)[*count].dischargedate.month);
fflush(stdin);
printf("\nEnter the patient's day of discharge\n");
scanf_s("%d",&(*patientstructpointer)[*count].dischargedate.day);
fflush(stdin);
printf("\nEnter the patient's floor number\n");
scanf_s("%d",&(*patientstructpointer)[*count].locationpatient.numFloor);
fflush(stdin);
printf("\nEnter the patient's room number\n");
scanf_s("%d",&(*patientstructpointer)[*count].locationpatient.numRoom);
fflush(stdin);
printf("\nEnter the patient's location number\n");
//location
((*patientstructpointer)[*count].locationpatient.subLocation)=1;
int locationnumber;
scanf_s("%d",&locationnumber);
switch(locationnumber)
{
case 1:
break;
case '2':
((*patientstructpointer)[*count].locationpatient.subLocation)=((*patientstructpointer)[*count].locationpatient.subLocation)<<1;
break;
case '3':
((*patientstructpointer)[*count].locationpatient.subLocation)=((*patientstructpointer)[*count].locationpatient.subLocation)<<2;
break;
case '4':
((*patientstructpointer)[*count].locationpatient.subLocation)=((*patientstructpointer)[*count].locationpatient.subLocation)<<3;
break;
case '5':
((*patientstructpointer)[*count].locationpatient.subLocation)=((*patientstructpointer)[*count].locationpatient.subLocation)<<4;
break;
case '6':
((*patientstructpointer)[*count].locationpatient.subLocation)=((*patientstructpointer)[*count].locationpatient.subLocation)<<5;
break;
case '7':
((*patientstructpointer)[*count].locationpatient.subLocation)=((*patientstructpointer)[*count].locationpatient.subLocation)<<6;
break;
case '8':
((*patientstructpointer)[*count].locationpatient.subLocation)=((*patientstructpointer)[*count].locationpatient.subLocation)<<7;
break;
default:
printf("you're fired");
}
fflush(stdin);
printf("\nEnter the patient's description (less than 1023 characters please)\n");
gets_s((*patientstructpointer)[*count].information);
fp=fopen("c:\\patientdirectory.txt","w");
/**/fwrite ((patientstructpointer)[*count],sizeof(*patientstructpointer),1,fp);
}
void displaypatients()
{
FILE *fp;
fp=fopen("c:\\patientdirectory.txt","r");
patientstruct (*patientstructpointer)[maxpatients];
patientstruct (patientstruct1)[maxpatients];
(patientstructpointer)=&(patientstruct1);
int numread;
int *count;
int asa;
count=&asa;
asa=0;
numread = fread((patientstructpointer)[*count],sizeof(*patientstructpointer),1,fp);
fflush(stdin);
printf("\npatient's first name\n");
puts((*patientstructpointer)[*count].namepatient.firstName);
fflush(stdin);
printf("\npatient's middle initial\n");
printf("%c",(*patientstructpointer)[*count].namepatient.middleI);
fflush(stdin);
printf("\npatient's last name\n");
puts((*patientstructpointer)[*count].namepatient.firstName);
fflush(stdin);
printf("\npatient's age\n");
printf("%d",(*patientstructpointer)[*count].age);
fflush(stdin);
printf("\npatient's state of residence\n");
puts((*patientstructpointer)[*count].geninfopatient.address.state);
printf("\npatient's city of residence\n");
puts((*patientstructpointer)[*count].geninfopatient.address.city);
fflush(stdin);
printf("\npatient's zipcode of residence\n");
printf("%d",(*patientstructpointer)[*count].geninfopatient.address.zipcode);
fflush(stdin);
printf("\npatient's street address of residence\n");
puts((*patientstructpointer)[*count].geninfopatient.address.streetAddress);
fflush(stdin);
printf("\npatient's phone number\n");
puts((*patientstructpointer)[*count].geninfopatient.phoneNumber);
fflush(stdin);
printf("\npatient's insurance carrier's name\n");
puts((*patientstructpointer)[*count].insurence.nameCarrier);
fflush(stdin);
printf("\npatient's insurance carrier's state\n");
puts((*patientstructpointer)[*count].insurence.insurancegeninfo.address.state);
fflush(stdin);
printf("\npatient's insurance carrier's city\n");
puts((*patientstructpointer)[*count].insurence.insurancegeninfo.address.city);
fflush(stdin);
printf("\npatient's insurance carrier's zipcode\n");
printf("%d",(*patientstructpointer)[*count].insurence.insurancegeninfo.address.zipcode);
fflush(stdin);
printf("\npatient's insurance carrier's street address\n");
puts((*patientstructpointer)[*count].insurence.insurancegeninfo.address.streetAddress);
fflush(stdin);
printf("\npatient's insurance carrier's deductable\n");
printf("%f",(*patientstructpointer)[*count].insurence.deductable);
fflush(stdin);
printf("\npatient's year of discharge\n");
printf("%d",(*patientstructpointer)[*count].dischargedate.year);
fflush(stdin);
printf("\npatient's month of discharge\n");
printf("%d",(*patientstructpointer)[*count].dischargedate.month);
fflush(stdin);
printf("\npatient's day of discharge\n");
printf("%d",(*patientstructpointer)[*count].dischargedate.day);
fflush(stdin);
printf("\npatient's floor number\n");
printf("%d",(*patientstructpointer)[*count].locationpatient.numFloor);
fflush(stdin);
printf("\npatient's room number\n");
printf("%d",(*patientstructpointer)[*count].locationpatient.numRoom);
fflush(stdin);
printf("\npatient's location number\n");
//location
int locationnumber;
switch((*patientstructpointer)[*count].locationpatient.subLocation)
{
case 1:
locationnumber=1;
break;
case (1<<1):
locationnumber=2;
break;
case (1<<2):
locationnumber=3;
break;
case (1<<3):
locationnumber=4;
break;
case (1<<4):
locationnumber=5;
break;
case (1<<5):
locationnumber=6;
break;
case (1<<6):
locationnumber=7;
break;
case (1<<7):
locationnumber=8;
break;
default:
locationnumber=0;
printf("you're fired");
}
printf("%d",locationnumber);
fflush(stdin);
printf("\npatient's description (less than 1023 characters please)\n");
puts((*patientstructpointer)[*count].information);
printf("\npress any key to continue\n");
getchar();
}
void main()
{
patientstruct patientstruct1[maxpatients];
char entry;
int count = 0;
do
{
entry = menu();
switch(entry)
{
case '1':
break;
case '2':
break;
case '3':
displaypatients();
break;
case '4':
break;
case '5':
addpatient(&patientstruct1,&count);
break;
case '6':
break;
case '7':
break;
case '8':
break;
default:
printf("you're fired");
}
}
while (entry != '7');
for(;;);
}