Search code examples
arrayscstructglobal-variables

Changing global c variable inside a struct array


I have a case where I have defined a global struct array in a seperate header file that I want to be able to change from function in another file but I can not make it work, I believe that the problem can be simplified to the follwing:

#include <stdio.h>

struct point{
    /*
    Measured points and reflector coordinates, both true and estimated
    are stored as points.
    */
    float x;    // x-coordinate [mm]
    float y;    // y-coordinate [mm]
} coordinates[3];


void set_value(){
    coordinates[0].x = 10.0;
    coordinates[1].x = 11.0;
    coordinates[2].x = 12.0;
}

int main(int argc, char const *argv[])
{
    set_value();
    printf("[0]: %d, [1]: %d, [2]: %d", coordinates[0].x, coordinates[1].x, coordinates[2].x);

}

Which gives the following non-sensical output:

[0]: 0, [1]: 1076101120, [2]: 0

The output that I want is the follwoing:

[0]: 10.0, [1]: 11.0, [2]: 12.0

What am I doing wrong?


Edit: It was just me forgetting to change %d to %f while testing out different struct types.


Solution

  • printf("[0]: %d, [1]: %d, [2]: %d", coordinates[0].x, coordinates[1].x, coordinates[2].x);
    

    You used wrong control format for printf, it should be %f instead for floating variables:

    printf("[0]: %f, [1]: %f, [2]: %f", coordinates[0].x, coordinates[1].x, coordinates[2].x);