By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,404 Members | 980 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,404 IT Pros & Developers. It's quick & easy.

formatting float variables to fprintf function

P: n/a
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);
}
Nov 14 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a
hp******@yahoo.com (hp******@yahoo.com) 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);

--
__________________________________________________ ______________________
Alan Coopersmith al***@alum.calberkeley.org
http://www.CSUA.Berkeley.EDU/~alanc/ aka: Al**************@Sun.COM
Working for, but definitely not speaking for, Sun Microsystems, Inc.
Nov 14 '05 #2

P: n/a
On 1 Jan 2004 15:48:14 -0800, hp******@yahoo.com (hp******@yahoo.com)
wrote:
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>>
Nov 14 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.