Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 5 Sep 2004 21:51:52 +0200
From:      Erik Trulsson <ertr1013@student.uu.se>
To:        Steve Kargl <sgk@troutmask.apl.washington.edu>
Cc:        freebsd-standards@freebsd.org
Subject:   Re: is printf() broken?
Message-ID:  <20040905195152.GA6096@falcon.midgard.homeip.net>
In-Reply-To: <20040905193640.GA37190@troutmask.apl.washington.edu>
References:  <20040905193640.GA37190@troutmask.apl.washington.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Sep 05, 2004 at 12:36:40PM -0700, Steve Kargl wrote:
> The following program
> 
> #include <stdio.h>
> int main(void) {
> 	int d;
> 	double x;
> 	x = 1.234E05;
> 	for (d = 0; d < 5; d++)
>     	printf("%+-31.*e\n", d, x);
> 	return 0;
> }
> 
> generates
> 
> +1e+05                         
> +1.2e+05                       
> +1.23e+05                      
> +1.234e+05                     
> +1.2340e+05                    
> 
> The question is whether the first number should be
> "+1.e+05".  That is, is the printing of the decimal
> point required or optional?  I only have Harbison
> and Steele's book and it does not state what the 
> expected behavior should be.

I believe printf() is correct, and that the printing of the decimal
point for the first number above is neither required nor optional but
actually not allowed at all

>From Harbison & Steele 5th edition:

 The e and E conversions 
 [...]
 If the precision is 0, then no digits appear after the decimal point.
 Moreover the decimal point also does not appear unless the # flag is
 present.

(Nearly identical text is also in H&S 3rd edition.)


>From n869.txt  (the last publically available draft of C99)

[the e and E conversions for fprintf]
[...]
 if the precision is zero and the # flag is not
 specified, no decimal-point character appears



-- 
<Insert your favourite quote here.>
Erik Trulsson
ertr1013@student.uu.se



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040905195152.GA6096>