2013-03-20 110 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