私は現在 C を学んでおり、ポインターと構造体の配列について理解するのに少し苦労しています。これが私が書いた簡単なプログラムです:
#include <stdio.h>
typedef struct { /* Define the structure Pokemon that contains a nickname, type and level*/
char nickname[11];
char type[11];
int level;
} Pokemon;
int main(void) {
char nickname[11];
char type[11];
int level;
for (int i = 0; i < 3; i++) { /* Iterate through the loop three times, each time create a new pokemon */
printf("Pokemon %i \n", i);
printf("Nickname: ");
scanf("%s", &nickname);
printf("Type: ");
scanf("%s", &type);
printf("Level: ");
scanf("%i", &level);
Pokemon * poke = {nickname, type, level}; /* Insert the pokemon into the array of Pokemon */
printf("%s, %s, %i", poke->nickname, poke->type, poke->level);
}
}
基本的には、3 つの特性を持つポケモンの構造体を作成したいと考えています。メイン関数では、ユーザーが 3 匹のポケモンの特性を入力してから、これら 3 つの特性を持つ構造体ポケモンのインスタンスを作成し、これらの特性を stdout に出力する必要があります。このコードを使用すると、コンパイルされますが、警告が表示されます。
pokemon.c:33:9: warning: initialization from incompatible pointer type [enabled by default]
pokemon.c:33:9: warning: (near initialization for ‘poke’) [enabled by default]
pokemon.c:33:9: warning: excess elements in scalar initializer [enabled by default]
pokemon.c:33:9: warning: (near initialization for ‘poke’) [enabled by default]
pokemon.c:33:9: warning: excess elements in scalar initializer [enabled by default]
pokemon.c:33:9: warning: (near initialization for ‘poke’) [enabled by default]
これがなぜなのかはわかりません-私が設定したポインターに関係していると思いますが、私が言うように、まだ頭を悩ませようとしています.
また、ポケモンの各インスタンスを 3 匹のポケモンの配列に入れたいと思います。これまでのところ、私はこれを持っています:
Pokemon p [3];
// This bit inside the for loop and after the 'poke' struct instantiation
p[i] = poke;
printf("%s,%s,%i inserted\n", poke.nickname, poke.type, poke.level );
しかし、それはコンパイルしたくありません-別のポインターエラーだと思います。