実行時に追加できるプレイヤーのダイナミックな配列を作成しようとしていますが、x座標で3人のプレイヤーを作成した場合は、4,7と15の値を出力してください。 33、20762704.C - 構造体の動的配列を作成し、構造体メンバが間違った値を出力していますか?
私はCとポインタを使い慣れていないし、どこが間違っているのか分からない。
#include <stdio.h>
#include <stdlib.h>
// contains data of a player
struct player {
int posX;
int posY;
int gold;
};
// struct for creating a list of players of dynamic size
struct playerList {
struct player p;
struct playerList *next;
};
// add a new player to the list with given coords
struct playerList *make(int x, int y) {
struct playerList *new_player;
new_player = (struct playerList *)malloc(sizeof(struct playerList));
new_player->p.posX = x;
new_player->p.posY = y;
new_player->p.gold = 0;
new_player->next = NULL;
return new_player;
}
// add a player to the list
void addPlayer(struct playerList *list, int x, int y) {
if(list->next) {
addPlayer(list->next,x,y);
}
else {
list->next = make(x,y);
}}
int main() {
struct playerList *players = (struct playerList *)malloc(sizeof(struct playerList));
addPlayer(players, 4,3);
addPlayer(players, 7,7);
addPlayer(players,15,1);
printf("%d\n",players[0].p.posX);
printf("%d\n",players[1].p.posX);
printf("%d\n",players[2].p.posX);
return 0;
}
リストの次の可変ポインタを割り当て後にnullに設定するか、calloc関数でメモリを割り当てる必要があります。さらに、あなたは配列ではなく、あなたが配列として動作するprintf関数でリストを持っています! –
@ G.Emadiあなたは私のために拡大できますか?どこをnullに設定すべきですか?リストの各要素をどのように参照して印刷するのですか? – jp963
最初のノードを正しく作成することはありません。 'addPlayer'関数はリストにすでに少なくとも1人のプレーヤーがあるときにプレーヤーを追加するためにしか機能しません –