[PS: your clock is off by a month]

Chris wrote:

> what am i doing wrong here. it compiles and works but after you enter in
> the first value it just stops. /* 

>       if ( ( j = read_x1( x1 ) ) == 'E' );
>               return EXIT_FAILURE;

[snip]

> float read_x1( float x1 )
> 
> {
>  
>       printf( "\nenter x1: " );
>       
>       if      ( scanf( "%f" , &x1 ) != 1 )
>       {
>               printf( "\nFailed to read entered value\n" );
>               x1 = 'E';       
>               return x1;
>       } 
>               
> return x1;
>       
> }

1. This (and the x2/y1/y2 versions) won't work. C uses call-by-value,
not call-by-reference. You would use either

        float read_x1( void )
or
        void read_x1(float *px1)

instead.

2. there isn't any point having four (nearly) identical functions,
which differ only in the prompt. Use something like:

        float read_float(const char *prompt)
        {
                float x;

                printf( "enter %s: ", prompt );
                fflush( stdout );
        
                if ( scanf( "%f" , &x ) != 1 )
                {
                        fprintf( stderr, "Failed to read entered number\n" );
                        return NAN;     /* IEEE Not-A-Number */
                }
        
                return x;
        }

3. However, the reason why your program is failing is that you are
unconditionally returning after the call to read_x1(). The indentation
doesn't match the presence of the semicolons; you wrote:

        if ( ( j = read_x1( x1 ) ) == 'E' );
                return EXIT_FAILURE;

but it would be more accurate to write

        if ( ( j = read_x1( x1 ) ) == 'E' )
                ;
        return EXIT_FAILURE;

I.e. you are conditionally executing an empty statement, then
unconditionally returning. Remove the semicolon, i.e.

        if ( ( j = read_x1( x1 ) ) == 'E' )     /* no semicolon here */
                return EXIT_FAILURE;

4. This has nothing to do with Linux. The above is all vanilla ANSI C,
and would apply equally to MS-DOS or VMS.

5. I think that you need to get a book on C.

-- 
Glynn Clements <[EMAIL PROTECTED]>

Reply via email to