C Programming - Floating Point Issues - Discussion

Discussion Forum : Floating Point Issues - Point Out Errors (Q.No. 1)
1.
Point out the error in the following program.
#include<stdio.h>
int main()
{
    struct emp
    {
        char name[20];
        float sal;
    };
    struct emp e[10];
    int i;
    for(i=0; i<=9; i++)
        scanf("%s %f", e[i].name, &e[i].sal);
    return 0;
}
Suspicious pointer conversion
Floating point formats not linked (Run time error)
Cannot use scanf() for structures
Strings cannot be nested inside structures
Answer: Option
Explanation:

Compile and Run the above program in Turbo C:

C:\>myprogram.exe
Sundar
2555.50
scanf : floating point formats not linked
Abnormal program termination

The program terminates abnormally at the time of entering the float value for e[i].sal.

Solution:

Just add the following function in your program. It will force the compiler to include required libraries for handling floating point linkages.

static void force_fpf() /* A dummy function */
{
    float x, *y; /* Just declares two variables */
    y = &x;      /* Forces linkage of FP formats */
    x = *y;      /* Suppress warning message about x */
}

Discussion:
36 comments Page 4 of 4.

Kirti said:   1 decade ago
What is emulator? What it does?

Pessi said:   1 decade ago
Ok if scanf cannot be used in structures then it would give an error related to it but given a linking error right? what does it mean?

Vikas tyagi said:   1 decade ago
/* Usage of an array of structures */
#include<stdio.h>

void main( )
{
struct book
{
char name[10] ;
float price ;
int pages ;
} ;
struct book b[100] ;
int i ;
float temp;
for ( i = 0 ; i <=99; i++ )
{
printf ( "\nEnter name, price and pages " ) ;
scanf ( "%s %f %d", &b[i].name, &temp, &b[i].pages ) ;
b[i].price=temp;
}
for ( i = 0 ; i <= 99 ; i++ )
printf ( "\n%s %f %d", b[i].name, b[i].price, b[i].pages ) ;

getch();
}

Sudip said:   1 decade ago
#include<stdio.h>
#include<conio.h>

static void force_dpf() /* A dummy function */
{
float x, *y; /* Just declares two variables */
y = &x; /* Forces linkage of FP formats */
x = *y; /* Suppress warning message about x */
}


int main()
{
struct emp
{
char name[20];
float sal;
};
struct emp e[10];
int i;
force_dpf();
for(i=0; i<=2; i++)
scanf("%s %f", e[i].name, &e[i].sal);


for(i=0; i<=2; i++)
printf("\n%s %f", e[i].name, e[i].sal);

getch();
}

Amit chopra said:   1 decade ago
This program is working, not even giving warnings on gcc compiler. I didn't understand whts the issue here. Please elaborate with respect to gcc?

Pathmaraj said:   1 decade ago
I don't know how that function include libraries without calling main(). Can you please explain this concept elaborately?


Post your comments here:

Your comments will be displayed after verification.