2013-03-20 4 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 дважды ... –

+1

Кроме того, нельзя сказать, что этот вопрос может быть в данный момент. Пожалуйста, разместите полный тестовый пример, демонстрирующий проблему. –

+0

Является ли 'plyr' указателем? –

ответ

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

Да, когда я пытаюсь так, компилятор сообщает об ошибке: запрос члена 'позиция' в чем-то не структура или объединение plyr - это указатель – miller

+1

@Miller 'foo-> pos' означает, что foo - это указатель, это то же самое, что и запись' (* foo) .pos'. И, конечно, если foo не является указателем, вы должны сделать это, как показано в этом ответе. – Lundin

Смежные вопросы