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>