[comp.lang.c] Problems with PRINTF, for some ungodly reason...

DAVE%UWF.BITNET@wiscvm.wisc.EDU (05/25/87)

All,
   I've got a (hopefully) simple problem with the printf statement, using
Lattice C V3.  My code looks something like this:

    while (i <= N0)
        {
        p = (a + b) / b;
        printf("\ni = %5d, ",i);
        printf("p = %lf, so there", p);
        if (abs(p - pl) / abs(p) < tol)
            {
            printf("\n\nMethod Returns %lf after %d iterations.\n", p, i);
            return (0);
            }
        i++;
        pl = p;
        (f(a) * f(p) > 0) ? (a = p) : (b = p);
        }

The problem is that both of the two printf's that try to output the variable
'P' meet with disaster, in that both output the format spec, in this case,
the %lf, but I also tried %f, %g, and %G, mostly in desperation.  How does
one output a (double) variable?

Lost & 1/2,

Dave Jaquay (DAVE@UWF.BITNET)

ark@alice.UUCP (05/26/87)

In article <7527@brl-adm.ARPA>, DAVE%UWF.BITNET@wiscvm.wisc.EDU writes:
> The problem is that both of the two printf's that try to output the variable
> 'P' meet with disaster, in that both output the format spec, in this case,
> the %lf, but I also tried %f, %g, and %G, mostly in desperation.  How does
> one output a (double) variable?

There are two versions of printf distributed with Lattice C.  One has
floating-point formats build in and the other doesn't.  If you intend
to print floating-point values, you must ask for the right ones.
Look, for instance at the LINKMS batch file.  If I remember right
you must include LCM.LIB and LC.LIB in that order when you link.

gwyn@brl-smoke.UUCP (05/27/87)

In article <7527@brl-adm.ARPA> DAVE%UWF.BITNET@wiscvm.wisc.EDU writes:
>the %lf, but I also tried %f, %g, and %G, mostly in desperation.

%f and %g are the right things to try; since they didn't work,
one concludes that your Lattice C implementation either doesn't
support them at all or supports them in some funny way.  You
might check whether there's a separate floating-point support
library you need to use that includes a more capable printf().

Note that %lf is not necessary, since it is not possible for
printf() to receive a (float) (it would be coerced to a (double)
when printf() is called).