-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だけです。プレイヤーが動いているので、どこかで間違えたに違いありません。彼は常に pos (7,7,7) にいるわけではありません。

4

2 に答える 2

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);
于 2013-03-20T11:35:03.927 に答える
0

ほんの一例

player_data_t foo;

foo.pos.x = 10.;

printf ("%lf\n", foo.pos.x);
于 2013-03-20T10:15:02.853 に答える