我有一个结构:
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。所以,我必须把它弄错,因为玩家正在移动。他一直没有上过pos(7,7,7)。
答案 0 :(得分:1)
正如您在评论中提到的,scalar_t
实际上是double
,所以
printf("%d")
解释错了。一个好主意是捆绑
scalar_t
具有打印其值的功能,
或至少包含正确的printf
格式说明符的常量。
这样typedef
的灵活性不会丢失。例如:
#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);
答案 1 :(得分:0)
只是一个例子
player_data_t foo;
foo.pos.x = 10.;
printf ("%lf\n", foo.pos.x);