in C, a variable doesn't retain the value i assign it and goes back to 0 [closed]
in C, a variable doesn't retain the value i assign it and goes back to 0 [closed]
I am writing a simple game engine in C and I have come across a very odd problem.
//SANJI
objs[1].animation = 1;
objs[1].pho.h = 52;
objs[1].pho.w = 25;
objs[1].pho.tmp_pos.x = 190;
objs[1].pho.tmp_pos.y = 40;
objs[1].pho.gravity = 1;
objs[1].hp = 10;
printf("%dn", objs[1].hp);//outputs 0???????
It seems no matter what I do the variable (member) hp
is refusing to accept the assignment and goes back to 0
. I tried searching with Google, but I am afraid I am unable to phrase this problem accurately.
hp
0
EDIT:
this is the definition of the OBJ struct:
struct OBJ
//animation
char animation;//if true apply animation; experimetnal
MOVIE sprites;
PHYSOBJ pho;
//OBJ_STATE state;
OBJ_STATE states[SEQ_MAX][ST_MAX];
int img;//number of image
int hp;
//control; AI or human
char control;//0 human, otherwise AI
;
Also there is no code between the printf and objs[1].hp = 10; i put the printf there for testing
This question appears to be off-topic. The users who voted to close gave this specific reason:
hp
objs[1].hp
At a minimum, please post the code where you define the struct for "objs". That would tell us how hp is defined, and how it relates to objs. But a COMPLETE example would be best: stackoverflow.com/help/mcve
– paulsm4
Aug 23 at 0:48
Need to see how you define "objs", and are you sure the "%d" is correct?
– asdf
Aug 23 at 0:51
This complete example: ideone.com/DqW1j1 works fine, so it would seem there's something in the code we can't see or replicate without assistance from you.
– Retired Ninja
Aug 23 at 1:30
@user3629249:
objs[1].animation = 1;
is just fine. Furthermore, C has no way to write a one-byte integer literal so you have to let the compiler do the int-to-char conversion..– rici
Aug 23 at 3:24
objs[1].animation = 1;
1 Answer
1
the following proposed code:
and now the proposed code:
#include <stdio.h>
struct POS
int x;
int y;
;
struct PHO
int h;
int w;
struct POS tmp_pos;
int gravity;
;
typedef struct PHO PHYSOBJ;
struct OBJ
//animation
char animation;//if true apply animation; experimetnal
//MOVIE sprites;
PHYSOBJ pho;
//OBJ_STATE state;
//OBJ_STATE states[SEQ_MAX][ST_MAX];
int img;//number of image
int hp;
//control; AI or human
char control;//0 human, otherwise AI
;
int main( void )
struct OBJ objs[2];
objs[1].animation = 1;
objs[1].pho.h = 52;
objs[1].pho.w = 25;
objs[1].pho.tmp_pos.x = 190;
objs[1].pho.tmp_pos.y = 40;
objs[1].pho.gravity = 1;
objs[1].hp = 10;
printf("%dn", objs[1].hp);//outputs 0???????
return 0;
When compiled, linked, run, the output is as follows:
10
So the problem is in something you have not shown us.
hp
andobjs[1].hp
are two different things. It would help to see a Minimal, Complete, and Verifiable example.– Retired Ninja
Aug 23 at 0:33