formatting float variables to fprintf function

H

hpy_awad

formatting float variables to fprintf has error to my writing to
output file called rental and I do not the reason that a rabish is
written to the file instead of the actual input screen values ?

#include <stdio.h>
//part09_le01_file_processing_file_setup_ver_01_iti_r01_ch09.c
struct name {
int int___member1;
float float_member2;
char char__member3;
};
main()
{
struct name record;
FILE *fpointer;
fpointer=fopen("rental","w");
char another;

do {
input_record(&record);
fprintf(fpointer,"%4d %f %c\n",record);
printf (" \nADD ANOTHER RECORD ----> ( y / n ) : ");
scanf("\n");
scanf("%c",&another);
} while (another=='y');
return 0;
}
input_record(rec)
struct name *rec;
{
printf("\nEnter int___member1: ");
scanf("%4d",&(*rec).int___member1);
printf("\nEnter float_member2: ");
scanf("%f",&(*rec).float_member2);
printf("\nEnter char__member3: ");
scanf("\n");
scanf("%c",&(*rec).char__member3);
}
 
A

Alan Coopersmith

(e-mail address removed) ([email protected]) writes in comp.unix.solaris:
|struct name {
|int int___member1;
|float float_member2;
|char char__member3;
|};
|fprintf(fpointer,"%4d %f %c\n",record);

You only provide one argument to fprintf, but ask it to print 3 things,
so it just makes up random garbage for the values of the second and
third. You must specify a value for every %-specifier - you can't just
put the struct there - you need to do:
fprintf(fpointer,"%4d %f %c\n", record.int___member1,
record.float_member2, record.char__member3);
 
B

Barry Schwarz

formatting float variables to fprintf has error to my writing to
output file called rental and I do not the reason that a rabish is
written to the file instead of the actual input screen values ?

#include <stdio.h>
//part09_le01_file_processing_file_setup_ver_01_iti_r01_ch09.c
struct name {

Learn to indent. It will save you a lot of trouble later.
int int___member1;
float float_member2;
char char__member3;
};
main()
{
struct name record;
FILE *fpointer;
fpointer=fopen("rental","w");
char another;

do {
input_record(&record);

There is no prototype in scope for input_record.
fprintf(fpointer,"%4d %f %c\n",record);

Here is your problem. fprintf will not dive into your structure to
retrieve the members. You must do it yourself with something like
fprintf(fpointer, "%4d %f %c\n",
record.int___member1,
record.float_member2
record.char__member3);
printf (" \nADD ANOTHER RECORD ----> ( y / n ) : ");
scanf("\n");
scanf("%c",&another);
} while (another=='y');
return 0;
}
input_record(rec)
struct name *rec;

Why are you still using this obsolete style for a function definition?
{
printf("\nEnter int___member1: ");
scanf("%4d",&(*rec).int___member1);

The -> operator is much preferred over the convoluted dereference
syntax you have:
scanf("%4d",&rec->int___member1);
printf("\nEnter float_member2: ");
scanf("%f",&(*rec).float_member2);
printf("\nEnter char__member3: ");
scanf("\n");
scanf("%c",&(*rec).char__member3);
}



<<Remove the del for email>>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,008
Latest member
HaroldDark

Latest Threads

Top