Simple C programming problem, variable stuck at initialised value

AI Thread Summary
The discussion revolves around a C programming issue where a variable, y, appears to remain at its initialized value of 0, regardless of user input. The code prompts the user to enter values for three variables: y, x, and z, and checks if x equals either y or z. The problem arises because the user is using the wrong format specifier in the scanf function; y, x, and z are declared as short integers, but the code uses "%d" instead of the correct "%hd". This mismatch can lead to unexpected behavior, as the input may not be correctly assigned to the variable. The user acknowledges this oversight and expresses confusion about why the program seems to work with other values. The discussion highlights the importance of using the appropriate format specifiers in C to avoid such issues.
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.
 
Technology news 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.
 
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I had a Microsoft Technical interview this past Friday, the question I was asked was this : How do you find the middle value for a dataset that is too big to fit in RAM? I was not able to figure this out during the interview, but I have been look in this all weekend and I read something online that said it can be done at O(N) using something called the counting sort histogram algorithm ( I did not learn that in my advanced data structures and algorithms class). I have watched some youtube...
Back
Top