2013-03-20 55 views
-1

我有一个结构:怎么看另一个结构内部结构的价值

typedef struct { 
    scalar_t x; 
    scalar_t y; 
    scalar_t z; 
} vector_t; 

typedef struct { 
     scalar_t x; 
     scalar_t y; 
     scalar_t z; 
    } point_t; 

一个结构里面:

typedef struct { 
    char *name; 
    int lives; 
    point_t pos; /* current position */ 
    vector_t vel; /* current velocity */ 
    . 
    . 
    . 
    int score; /* players' score */ 
    . 
    . 
    . 
    } player_data_t; 

在函数里,我有计算玩家位置的逻辑。但是,现在当我想看到x,y和z的值。当我尝试printf("%d", plyr->pos.x)或任何其他值时,我所得到的是7。所以,我必须把它弄错,因为球员在移动。他总是不在位置(7,7,7)。

+0

你似乎已经张贴vector_t定义两次...... – 2013-03-20 10:09:06

+1

此外,它是不可能的,说什么的问题可能是目前。请发布一个完整的测试案例来证明问题。 – 2013-03-20 10:10:08

+0

'plyr'是一个指针吗? – 2013-03-20 10:10:34

回答

1

正如你在评论中提到的,scalar_t事实上是一个double,所以 printf("%d")解释是错误的。一个好主意是捆绑 scalar_t与函数打印出它的值, 或至少一个常量包含正确的printf格式说明符。 这样,typedef ing的灵活性不会丢失。例如:

#define SCALAR_SPECIFIER "%d" 
typedef double scalar_t; 
... 
scalar_t foo; 
printf("Value of foo: " SCALAR_SPECIFIER, foo); 

typedef double scalar_t; 
void print_scalar_t(scalar_t value); 
0

只是一个例子

player_data_t foo; 

foo.pos.x = 10.; 

printf ("%lf\n", foo.pos.x); 
+0

是的,当我尝试这样,编译器会报告错误:请求对一些成员的POS'不一个结构或联合 plyr是一个指针 – miller 2013-03-20 10:19:28

+1

@Miller'foo-> pos'表示foo是一个指针,它和写'(* foo).pos'是一样的。当然如果foo不是一个指针,你应该按照这个答案中的说明来做。 – Lundin 2013-03-20 10:23:29