Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Simple C programming problem, variable stuck at initialised value

  1. Dec 16, 2013 #1
    Simple C programming problem, variable "stuck" at initialised value


    This is most likely an error in my code but I just can't see what it is! I am new to C programming and maybe I have just been staring at it for so long that I can't see the obvious error. I was playing around with a simple if statement; basically, the user enters three numbers assigned to the variables y, x and z and the programme identifies if x is equal to either y or z, or neither, and also prints on screen the values for y, x, and z, as follows:

    Code (Text):

    #include <stdio.h>

    //Declare and initialise variables
    short x = 0, y = 0, z = 0;

    main( void )

    //User sets the variable values
    printf("Enter a value for y: \n");
    scanf("%d", &y);
    printf("Enter a value for x: \n");
    scanf("%d", &x);
    printf("Enter a value for z: \n");
    scanf("%d", &z);

    //Compare x to y and z
    if ((x==y) || (x==z))
    {printf("x is equal to either y or z");}
    {printf("x is not equal to either");}

    //Print values of the three variables
    printf("\ny,x,z are equal to %d,%d,%d", y, x, z);
    The peculiar thing is, no matter what is entered for y, the value appears to remain 0, as the final printf shows when the programme is run; consequently, the if statement takes y as always 0, so the statement seems to "work", but only with y set to 0. However, if I initialiase y to a different value, such as 5, it will change and the programme works fine. Why is it that when y is set to 0 to begin with it remains 0, but if I initialise it to a different value it works?

    I am using code blocks on a linux system if that is of any help.

    Thanks in advance.
  2. jcsd
  3. Dec 16, 2013 #2


    User Avatar
    Science Advisor
    Gold Member

    x, y and z are declared as short int, but you are using "%d" to read and write their values. For short int you should use "%hd".
  4. Dec 16, 2013 #3
    Ah, thanks DrGreg. I haven't covered that yet: the only examples I have come across in the book I am using have used int and double with %d and %f. It's strange how it still works for some values! That threw me.

    Many thanks.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook