1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

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