|
Home > Archive > Unix Programming > January 2004 > formatting float variables to fprintf function
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
formatting float variables to fprintf function
|
|
| hpy_awad@yahoo.com 2004-01-23, 5:21 pm |
| 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_v
er_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);
}
| |
| Alan Coopersmith 2004-01-23, 5:21 pm |
| hpy_awad@yahoo.com (hpy_awad@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 alanc@alum.calberkeley.org
http://www.CSUA.Berkeley.EDU/~alanc/ aka: Alan.Coopersmith@Sun.COM
Working for, but definitely not speaking for, Sun Microsystems, Inc.
| |
| Barry Schwarz 2004-01-23, 5:21 pm |
| On 1 Jan 2004 15:48:14 -0800, hpy_awad@yahoo.com (hpy_awad@yahoo.com)
wrote:
quote:
>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_v
er_01_iti_r01_ch09.c
>struct name {
Learn to indent. It will save you a lot of trouble later.
quote:
>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.
quote:
>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);
quote:
>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?
quote:
>{
>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);
quote:
>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>>
|
|
|
|
|