SmOg3R
SmOg3R

Reputation: 294

C float values conversion

int main(){

    int  N, i, j=0;

    float MA, MB, asum=0, bsum=0, y;

    printf("\number of pairs: "); scanf("%d", &N);

    int a[N+1], b[N+1], c[N+1];


    for(i=1; i<N+1; i++){

        printf("\na%d",i); printf("=");
        scanf("%f", &a[i]);


        printf("b%d",i); printf("=");
        scanf("%f", &b[i]);

        printf("\n aSUM= %.6f \n",asum);
        asum+=a[i];
        printf("\n aSUM= %.6f \n",asum);

    } 

The idea of this code is simple. User inputs int or float values, then they get summed and outputted as a float value. However I'am getting astronomical values straight away. Fe. if it tries to make addition of 0 and 7, it outputs a value of 1088421888.000000. What the heck is going on?? :D

Upvotes: 0

Views: 107

Answers (3)

You should enable all warnings with a modern C compiler (like GCC 4.8).

 int a[N+1], b[N+1], c[N+1];
 //...later
     scanf("%f", &a[i]);

This cannot work: %f is for scanf(3) a control format requiring a float pointer, and &a[i] is a pointer to an int. (and GCC would have warned about that).

And you have other errors too. Please enable all warnings -e.g. compile with gcc -Wall

BTW, it is much better to put \n at the end of your printf format control string (not at the beginning!).

Upvotes: 5

haccks
haccks

Reputation: 105992

You are using wrong specifier for int. It will invoke undefined behavior. You will get anything. You are lucky that you are not getting the desired result!

Upvotes: 2

peterh
peterh

Reputation: 12575

sscanf doesn't know about the type of their pointer parameters, so you read in floats in integer pointers. Thus, integer pointers were as float interpreted.

You need to scanf into a temporary float variable, and then convert this to integers. So:

float  theFloat;
sscanf("%f", &theFloat);
N[a]=theFloat;

Upvotes: 2

Related Questions