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 1 of 4.

Rahul said:   8 years ago
#include<stdio.h>
typedef struct
{
int roll;
char name[10];
float avg;
}student;
void linkfloat() // THIS FUNCTION IS USED TO LINK THE FLOATING POINT MEMBER
{
float a = 0, *b;
b = &a;
a = *b;
}
void main(void)
{
student *s;
clrscr();
printf("\n\tEnter roll : ");
scanf("%d", &s->roll);
fflush(stdin);
printf("\n\tEnter name : ");
gets(s->name);
fflush(stdin);
printf("\n\tEnter avg : ");
scanf("%f", &s->avg);
fflush(stdin);
printf("\n\tRoll : %d", s->roll);
printf("\n\tName : %s", s->name);
printf("\n\tAvg : %f", s->avg);
getch();
}

A special function called link float ( ) should be enclosed within the scope of the program. This function will get executed automatically to link the floating point member at runtime.
(1)

VALPLO said:   1 decade ago
It compiles excellent in GCC, at least. I suppose, the most modern compilers will be just as glad to compile this, So the question is a bit obsolete.

Gaja said:   1 decade ago
I don't understand about dummy variables &functions.

Santa said:   1 decade ago
In case of e[i].name it is not showing any error then why in the case of &e[i].sal it is shown the error ?

Ankit said:   1 decade ago
Please help me. Is it because of & not there before e[i].

JjB said:   1 decade ago
e[i].name refers to the address so no need of &.

Pramod mohite said:   1 decade ago
Why the problem use the float value use in structure?

Madhu said:   1 decade ago
Since there no addressing pointer like '&' in scanf. It generates an error.

Kunal said:   1 decade ago
No sir in gcc you can also link the float variable.

main(){
struct emp{

float k;
};
struct emp e;
printf("enter multiple vallues");
scanf("%f",&e.k);
printf("%f",e.k);

}

Try it in gcc.

Kunal said:   1 decade ago
main()
{
struct emp
{
char name[25];
int age;
float sal;
};
struct emp e[2];
int i=0;
for(i=0;i<2;i++){
scanf("%s %d %f", &e[i].name, &e[i].age, &e[i].sal);
}

for(i=0;i<2;i++){
printf("%s %d %f", e[i].name, e[i].age, e[i].sal);
}
}

Try it also. It also work then what is the problem?


Post your comments here:

Your comments will be displayed after verification.