Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

scanf float

Posted on 2004-10-18
4
Medium Priority
?
2,762 Views
Last Modified: 2008-03-17
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
0
Comment
Question by:doggz
  • 2
4 Comments
 
LVL 46

Expert Comment

by:Kent Olsen
ID: 12341473


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
 
LVL 5

Accepted Solution

by:
van_dy earned 120 total points
ID: 12341804
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
 

Author Comment

by:doggz
ID: 12342504
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
 
LVL 46

Assisted Solution

by:Kent Olsen
Kent Olsen earned 80 total points
ID: 12342529

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

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This tutorial is posted by Aaron Wojnowski, administrator at SDKExpert.net.  To view more iPhone tutorials, visit www.sdkexpert.net. This is a very simple tutorial on finding the user's current location easily. In this tutorial, you will learn ho…
Windows programmers of the C/C++ variety, how many of you realise that since Window 9x Microsoft has been lying to you about what constitutes Unicode (http://en.wikipedia.org/wiki/Unicode)? They will have you believe that Unicode requires you to use…
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use for-loops in the C programming language.
The goal of this video is to provide viewers with basic examples to understand opening and reading files in the C programming language.
Suggested Courses

580 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question