Simple C programming problem, variable stuck at initialised value

Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
2 replies · 3K views
nobahar
Messages
482
Reaction score
2
Simple C programming problem, variable "stuck" at initialised value

Hello!

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:
#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");}
else
{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.
 
on Phys.org
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".
 
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.