the structure and other things have been declared already just need some help with writing this info to the file with random access method.
customer info;
void customerinfo(customer);

void customerinfo(customer info)
{
	FILE *ci;
	if ((ci=fopen("testing.txt","ab"))==NULL)
	printf("File \"testing.txt\" could not be opened");
	else
	{
	printf("Customer ID: ");
	fflush(stdin); 
	scanf("%d",& info.cusid);
	//fprintf(ci,"\n\nCustomer ID: %8d\n",info.cusid);

	printf("Customer first name: ");
	fflush(stdin);
	gets(info.fname);
	//fprintf(ci,"Name: %s",info.fname);

	printf("Customer last name: ");
	fflush(stdin);
	gets(info.lname);
	//fprintf(ci," %s\n",info.lname);

	printf("Email: ");
	fflush(stdin);
	gets(info.email);
	//fprintf(ci,"Email: %s\n",info.email);

	printf("Phone #: ");
	gets(info.phone);
	//fprintf(ci,"Phone Number: %s\n",info.phone);
	
	printf("Amount paid to date: ");
	fflush(stdin);
	scanf("%f",& info.apaid);
	//fprintf(ci,"Amount paid to date: %.2f\n",info.apaid);
	
	printf("Amount owed to date: ");
	fflush(stdin);
	scanf("%f",& info.tpaid);
	//fprintf(ci,"Amount owed to date: %.2f\n",info.tpaid);
	fwrite(& info,sizeof (customer),1,ci);
	printf("The information has been stored");
	fclose(ci);
	}
}

Im trying to write all that info to the file in random access but im not sure if thats where the fwrite should be

Recommended Answers

All 4 Replies

Im trying to write all that info to the file in random access

If you want random access, you have to specify where in the file this record is to be written. But random access writing isn't as simple as you seem to think. You'd be better off either using memory mapped files or making an edited copy of the file and overwriting the original with the copy.

With the work im doing i need to use a random access file. Because im going to need to edit files and stuff. any tips about random access i gladly accept

With the work im doing i need to use a random access file

Yes, I understand. Now read my previous post again.

any tips about random access i gladly accept

You really have no choice but to rebuild the file somewhere else, then overwrite it with the modified content. You can't insert or delete without a record-oriented file structure. Random access insertions or deletions complicate the task greatly.

Read up on the file seeking functions. You can position your current read/write position at a specific place in a file, either offset from the beginning, end, or your current location (backward or forward) in the file. From the Linux fseek() man pages:

FSEEK(3)                   Linux Programmer’s Manual                  FSEEK(3)

NAME
       fgetpos, fseek, fsetpos, ftell, rewind - reposition a stream

SYNOPSIS
       #include <stdio.h>

       int fseek(FILE *stream, long offset, int whence);

       long ftell(FILE *stream);

       void rewind(FILE *stream);

       int fgetpos(FILE *stream, fpos_t *pos);
       int fsetpos(FILE *stream, fpos_t *pos);

DESCRIPTION
       The  fseek()  function sets the file position indicator for the stream pointed to by stream.  The new position,
       measured in bytes, is obtained by adding offset bytes to the position specified by whence.  If whence is set to
       SEEK_SET,  SEEK_CUR, or SEEK_END, the offset is relative to the start of the file, the current position indica-
       tor, or end-of-file, respectively.  A successful call to the fseek() function clears the end-of-file  indicator
       for the stream and undoes any effects of the ungetc(3) function on the same stream.

       The  ftell()  function  obtains  the  current value of the file position indicator for the stream pointed to by
       stream.

       The rewind() function sets the file position indicator for the stream pointed to by stream to the beginning  of
       the file.  It is equivalent to:

              (void) fseek(stream, 0L, SEEK_SET)

       except that the error indicator for the stream is also cleared (see clearerr(3)).

       The  fgetpos()  and fsetpos() functions are alternate interfaces equivalent to ftell() and fseek() (with whence
       set to SEEK_SET), setting and storing the current value of the file offset into or from the  object  referenced
       by  pos.   On some non-Unix systems an fpos_t object may be a complex object and these routines may be the only
       way to portably reposition a text stream.

RETURN VALUE
       The rewind() function returns no value.  Upon successful completion, fgetpos(), fseek(),  fsetpos()  return  0,
       and ftell() returns the current offset.  Otherwise, -1 is returned and errno is set to indicate the error.

ERRORS
       EBADF  The stream specified is not a seekable stream.

       EINVAL The whence argument to fseek() was not SEEK_SET, SEEK_END, or SEEK_CUR.

       The  functions  fgetpos(),  fseek(),  fsetpos(),  and ftell() may also fail and set errno for any of the errors
       specified for the routines fflush(3), fstat(2), lseek(2), and malloc(3).

CONFORMING TO
       C89, C99.

SEE ALSO
       lseek(2), fseeko(3)

COLOPHON
       This page is part of release 3.22 of the Linux man-pages project.  A description of the project,  and  informa-
       tion about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/.

GNU                               1993-11-29                          FSEEK(3)
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.