fread/fwrite

Discussion in 'C' started by chopficaro, May 11, 2008.

  1. chopficaro

    chopficaro New Member

    Joined:
    May 11, 2008
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    0
    PLEASE DO NOT BE INTIMIDATED BY THE SIZE OF MY CODE, I BELIEVE THE PROBLEM IS VERY SIMPLE AND IT IS MARKED WITH /*ERROR*/. when i run the exe, i can add 2 patients easily to the file. then i try to display them. it displays the first one just fine, but the second it tries to display the first value in the [1]th element of the array, i get an error message. that part of my code is marked with a /*ERROR*/ just before it. easy to find plz help this is due monday. if u can solve my problem then just give me a jpeg and will erect a 500 meter idol of worship in your image.

    heres my code
    Code:
    #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)
    {
    	patientstruct patientstruct1[maxpatients];
    	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","a");
    /**/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;
    	while (!feof(fp))
    	{
    		numread = fread((patientstructpointer)[*count],sizeof(*patientstructpointer),1,fp);
    		fflush(stdin);
    		printf("\npatient's first name\n");
    /*ERROR*/		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);
    		(*count)++;
    	}
    
    		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(;;);
    }
    
    
     
  2. chopficaro

    chopficaro New Member

    Joined:
    May 11, 2008
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    0
    yo someone just gave me a hint but they were a little unspecific, he said "it probably didnt clean the buffer between READING the 1st file and inputing the SECOND file"
    so how do i do that? FFLUSH(STDIN);? system("cls");?
     
  3. chopficaro

    chopficaro New Member

    Joined:
    May 11, 2008
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    0
    its also interesting that "numread" returns a zero on the first patient and a 1 on the 2nd patient
    heres my code
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice