• C

scanf float

What is the problem with this code:
float fl=0;
scanf("%.2f",&fl);

for some reason fl doesn't get the expected value. as per the spec, it seems that it is legal to use .,- before the f of float. I assume it obeys the same rules as printf. Am I wrong?

Thanks
doggzAsked:
Who is Participating?
 
van_dyConnect With a Mentor Commented:
Please look into the scanf manpage. it clearly specifies as follows:

 "In addition to these flags, there may be an optional maximum field width,
     expressed as a [decimal integer], between the % and the conversion"

you cannot specidy noninteger fiel widths(like .2 or 8.3) with scanf.

hope this help,
van_dy
0
 
Kent OlsenData Warehouse Architect / DBACommented:


You can specify a length qualifier ("%6f"), and even a complete format ("%8.3f").


What are you trying to accomplish?  I'm not sure exactly what ".2f" would represent on a scan.

Kent
0
 
doggzAuthor Commented:
To Kent - What am I trying to achieve? same as in printf, for printing, enforce formatted input. Suppose one enters 1111.2222, and I the format is %.2f, I want the variable to get the value 1111.22. That is what I expect - I expect fl to get the number as if I was trying to print 1111.2222 with similar format. is that unreasonable?

To van_dy - take a look at page 158 at the table in K&R.
0
 
Kent OlsenConnect With a Mentor Data Warehouse Architect / DBACommented:

Hi doggz,

You can specifcy the total field length, but not the number of digits past the decimal point (precision).  (Thanks to van_dy for the clarification -- I thought that you could specify the (field length) or (field length and precision) but apparently not.)

char *Str = "1111.2222";
float Value;

  sscanf (str, "%7f", &Value);
  printf ("%10.4f\n", Value);


The scanf() should extract "1111.22" from the string, which should be confirmed by the print:

 1111.2200


Good Luck,
Kent
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.