Not to confuse everyone, but got rid of the !feof.

Here is my new code:

Code:
#include <stdio.h>#include <stdlib.h>
#include <math.h>




struct hardwareData 
{
	int recordNum;
	char toolname[20];
	int quantity;
	int cost;
}; 


/* prototypes */
int enterChoice( void );
void textFile( FILE *readPtr );
void updateRecord( FILE *fPtr );
void newRecord( FILE *fPtr );
void deleteRecord( FILE *fPtr );


int main()
{
  FILE *cfPtr; 
  cfPtr = fopen( "hardware.dat", "w" );
  int choice;


  
	if ((cfPtr = fopen( "hardware.dat", "rb+" )) == NULL ) 
	{
		printf( "File could not be opened.\n" );
	}
	else 
	{
		while (( choice = enterChoice()) != 5 ) 
		{
 			switch ( choice ) 
			{
				/* create text file from record */
 				case 1: 
				textFile( cfPtr );
				break;


				/* update record */
 				case 2: 
				updateRecord( cfPtr );
				break;


				/* create record */
 				case 3:
				newRecord ( cfPtr );
				break;


				/* delete existing record */
 				case 4:
				deleteRecord ( cfPtr );
				break;


				/* display message if user does not enter valid choice */
 				default:
				printf( "Incorrect choice\n" );
				break;


 			} 
		} 
		fclose( cfPtr ); 
	} 
	return 0; 
} 


void textFile( FILE *readPtr )
{
	FILE *writePtr;


	struct hardwareData hardware = { 0, "", 0, 0 };


	if ((writePtr = fopen( "hardware.txt", "w" )) == NULL ) 
	{
		printf( "File could not be opened.\n" );
	} 
	else
	{ 
		rewind( readPtr );
		/* copy all records from random-access file to text file */
		//fgets(buf, sizeof(buf), fp) != NULL
		//while ( !feof( readPtr ) ) 
		char bufz[BUFSIZ] = "Garbage";


		if (fgets(bufz, sizeof(bufz), readPtr) == NULL) {
			printf("File is empty.\n");
		}


		while ( fgets(bufz, sizeof(bufz), readPtr) != NULL)
		{
 			fread( &hardware, sizeof( struct hardwareData ), 1, readPtr );
 			/* write single record to text file */
 			//if ( hardware.recordNum != 0 ) 
			//{
				fprintf(writePtr, "%d %s %d %d\n", hardware.recordNum, hardware.toolname, hardware.quantity, hardware.cost );
				fprintf(stderr, "wrote #%d, %s\n", hardware.recordNum, hardware.toolname);
 			//}
			//else
			//{
			//	printf("File is empty.\n");
			//}
		} 
		fclose( writePtr );
	} 
	writePtr = fopen( "hardware.txt", "r" );


	int toolNumber;
	char toolName[20];
	int toolQuanity;
	int toolCost;
	char buf[BUFSIZ] = "Garbage";


	//while ( !feof( writePtr ) ) {
	while ( fgets(buf, sizeof(buf), writePtr) != NULL)
	{
		//fgets(buf, sizeof(buf), fp) != NULL
		int check;
		check = sscanf( buf, "%d%[^0-9-]%d%d", &toolNumber, toolName, &toolQuanity, &toolCost );
		printf( "(check = %d) %d %s %d %d\n",check, toolNumber, toolName, toolQuanity, toolCost );
	}
	fclose( writePtr );
} 


void updateRecord ( FILE *fPtr )
{
	int record; 
	struct hardwareData hardware = { 0, "", 0, 0 };


	printf( "Enter record to update (1-100): ");
	scanf( "%d", &record );


	
	fseek( fPtr, ( record - 1 ) * sizeof( struct hardwareData ), SEEK_SET );


	fread( &record, sizeof( struct hardwareData ), 1, fPtr );


	if ( hardware.recordNum == 0) 
	{
 		printf( "Record #%d has no information.\n", record );
	}
	else 
	{ /* update record */
 		printf( "Enter new tool name, quantity,cost \n?" );
 		scanf( "%s%d%d", hardware.toolname, &hardware.quantity, &hardware.cost );
     
 		fseek( fPtr, ( record - 1 ) * sizeof( struct hardwareData ), SEEK_SET );
		/* write updated record over old record */
 		fwrite( &hardware, sizeof( struct hardwareData ), 1, fPtr );
	} 


} 


void deleteRecord( FILE *fPtr )
{
	struct hardwareData hardware; 
	struct hardwareData blankRecord = { 0, "", 0,0 };
	int recordNum; 


	
	printf( "Enter record number to delete (1-100): " );
	scanf( "%d", &recordNum );


	fseek( fPtr, ( recordNum - 1 ) * sizeof( struct hardwareData ), SEEK_SET );


	fread( &hardware, sizeof( struct hardwareData ), 1, fPtr );
  
	if ( hardware.recordNum==0 ) 
	{
		printf ( "Record %d does not exist.\n", recordNum );
	} 
	else 
	{ 
		fseek( fPtr, ( recordNum - 1 ) * sizeof( struct hardwareData ), SEEK_SET );
		fwrite( &blankRecord, sizeof( struct hardwareData ), 1, fPtr );
	} 
} 


void newRecord( FILE *fPtr )
{
	struct hardwareData hardware = { 0, "", 0, 0 };
	int piece; 


	printf( "Enter record number to create (1-100) : " );
	scanf( "%d", &piece);
	
	fseek( fPtr, (piece - 1) * sizeof( struct hardwareData ), SEEK_SET );


	fread( &hardware, sizeof( struct hardwareData ), 1, fPtr );


	if ( hardware.recordNum != 0 ) 
	{
		printf( "Record already exists.\n", hardware.recordNum );
	}
	else 
	{ 


		printf( "Enter tool name, quantity, cost\n?" );
		scanf("%s%d%d", hardware.toolname, &hardware.quantity, &hardware.cost);


		hardware.recordNum = piece;


		fseek(fPtr, (hardware.recordNum-1) * sizeof( struct hardwareData), SEEK_SET);


		fwrite( &hardware, sizeof( struct hardwareData), 1, fPtr);
	} 
} 
 
int enterChoice( void )
{
	int menuChoice;
	printf( "\nEnter your choice\n"
			"1 - List of all tools\n"
			"2 - Update an existing tool\n"
			"3 - Add a new tool\n"
			"4 - Delete a tool\n"
			"5 - End program\n? " );
	scanf( "%d", &menuChoice ); 
	return menuChoice;
}