我试图将字符串数组的位置作为int数组的参数传递,并且我将无效间接作为错误。我想计算当他们被随机生成和捕获时被捕获的小宠物的频率。我做了一些研究,但仍然无法掌握它的概念。附:我的讲师正在教授过期版本的C,所以请注意printf(s)。
int encounter() {
//list of pokemons
char pokemon[5][10] = {"Magikarp", "Zubat", "Eevee", "Magmar", "Pikachu"};
int type[5] = {0,0,0,0,0};
int i;
int a=0;
//random number generator from 0 - 4
srand(time(NULL));
i = (rand() % 5);
//prints out the pokemon name
printf("A wild %s appeared! \n", pokemon[i]);
type[pokemon[i]] += 1;
for(a=0; a<6; a++) {
printf(type[a]);
}
return 0;
}
答案 0 :(得分:1)
该行:
type[pokemon[i]] += 1;
不正确。
pokemon[i]
的类型为char*
;即它是一个指针,不应该用于索引type
数组。我认为你的意思是用type
索引i
数组。它应该是
type[i] += 1;
此外,打印类型的循环是错误的。它迭代6次,但type
数组只有5个元素(0..4
包含在内)。最后,printf
函数需要一个格式字符串作为第一个参数(它从一开始就有),所以它应该是:
for(a = 0; a < 5; a++) {
printf("%d\n", type[a]);
}
答案 1 :(得分:1)
三件事:
type[pokemon[i]] += 1;
,您尝试传递一个字符串作为数组的索引。你应该做的是type[i]
。for(a=0; a<6; a++)
将超出范围,因为type
有五个元素,而不是六个元素。printf(type[a])
无效C;如果传递了指定整数的有效格式字符串,则printf
只能打印整数。试试printf("%d\n", type[a]);
答案 2 :(得分:-1)
在您的示例中,i
代表生成的pockemon索引。如果它是随机生成的,即它取值为3,则它指的是名为“Magmar”(pockemon[3]
)的pockemon。类型数组包含捕获的pokemons的数量,因此它必须由pockemon索引本身索引,而不是由没有意义的字符串数组的位置索引。
更正type[pokemon[i]] += 1;
到type[[i]] += 1;