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

Recommended Answers

All 3 Replies

Line

fp=fopen("c:\\patientdirectory.txt","r");

opens patientdirectory in read mode only. You may add + or b+ to open it for appending a text file ("r+") or binary file ("rb+").

You must have gotten an error message when trying to write data on file opend with "r" mode using fwrite.

fp=fopen("c:\\patientdirectory.txt","w");
/**/fwrite((patientstructpointer)[*count],sizeof(*patientstructpointer),1,fp);

what are you talking about? i opened it for writing the very line above!

what are you talking about? i opened it for writing the very line above!

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

He's talking about line 6. You open fp on line 6 with the read flag, , then reopen it on line 142 with the write flag. Do you you ever close it in between? I don't know whether that matters or not since I'm not very familiar with C. I've had that kind of thing cause me trouble in C++ though. You might want to repost in the C forum because this looks like C code.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.