Try this on for learning. I just whooped it up as an exercise in fun.
Code:
#include <stdio.h>
#include <string.h>
#define FILENAME "/Users/toddburch/struct.dat"
struct mystruct {
char lname[31] ;
char fname[21] ;
int address ;
char street[31] ;
char city[21] ;
char state[3] ;
int zip ;
} ;
int main (int argc, const char * argv[]) {
FILE * fp ;
struct mystruct record, record2 ;
char name[51] ;
char address[51] ;
char city_state_zip[51] ;
char * blank, * blank2 ;
printf("Enter First and Last Name...\n") ;
fgets( name, sizeof(name), stdin) ;
if (name[strlen(name)-1] == '\n') name[strlen(name)-1] = 0 ;
blank = strchr(name, ' ') ;
*blank = 0 ;
strcpy(record.lname, name) ;
strcpy(record.fname, blank+1) ;
printf("Enter Street Address (# and street name)...\n") ;
fgets( address, sizeof(address), stdin) ;
if (address[strlen(address)-1] == '\n') address[strlen(address)-1] = 0 ;
blank = strchr(address, ' ') ;
*blank = 0 ;
record.address = atoi(address) ;
blank++ ;
if (strlen(blank) > sizeof(record.street)) blank[sizeof(record.street)-1] = 0 ; // truncate it
strcpy(record.street, blank) ;
printf("Enter City, State (2 char abbreviation) and zip code...\n") ;
fgets( city_state_zip, sizeof(city_state_zip), stdin) ;
if (city_state_zip[strlen(city_state_zip)-1] == '\n') city_state_zip[strlen(city_state_zip)-1] = 0 ;
blank = strchr(city_state_zip, ' ') ;
*blank = 0 ;
strcpy(record.city, city_state_zip) ;
blank2 = ++blank ;
blank = strchr(blank, ' ') ;
*blank = 0 ;
strcpy(record.state, blank2) ;
record.zip = atoi(blank+1) ;
fp = fopen( FILENAME, "wb") ;
if (!fp) {
printf("Cannot open output file.\n") ;
return (-1) ;
}
fwrite( &record, sizeof(record), 1, fp) ;
fclose(fp) ;
fp = fopen( FILENAME, "rb") ;
if (!fp) {
printf("Cannot open input file.\n") ;
return (-1) ;
}
fread( &record2, sizeof(record2), 1, fp) ;
fclose(fp) ;
printf("First/Last Name : %s %s\n", record2.fname, record2.lname) ;
printf("Address : %d %s\n", record2.address, record2.street) ;
printf("City, State, ZIP: %s %s %d\n", record2.city, record2.state, record2.zip) ;
return 0;
}