将char数组转换为值并在C中放入int数组

时间:2016-11-19 19:18:27

标签: c arrays

我试图将字符串数组的位置作为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;
}

3 个答案:

答案 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)

三件事:

  1. 使用行type[pokemon[i]] += 1;,您尝试传递一个字符串作为数组的索引。你应该做的是type[i]
  2. for(a=0; a<6; a++)将超出范围,因为type有五个元素,而不是六个元素。
  3. 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;