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

在C中将字符数组转换为值并放入int数组,c,arrays,C,Arrays,我试图将字符串数组的位置作为int数组的参数传递,而间接寻址无效是一个错误。我想统计一下我捕获的口袋妖怪的频率,它们是随机生成和捕获的。我做了相当多的研究,但仍然不能理解它的概念。另外,我的讲师教授的是过时的C语言版本,所以请注意printf(S) int遭遇(){ //口袋妖怪名单 char pokemon[5][10]={“Magikarp”、“Zubat”、“Eevee”、“Magmar”、“Pikachu”}; int类型[5]={0,0,0,0}; int i; int a=0; //

我试图将字符串数组的位置作为int数组的参数传递,而间接寻址无效是一个错误。我想统计一下我捕获的口袋妖怪的频率,它们是随机生成和捕获的。我做了相当多的研究,但仍然不能理解它的概念。另外,我的讲师教授的是过时的C语言版本,所以请注意printf(S)

int遭遇(){
//口袋妖怪名单
char pokemon[5][10]={“Magikarp”、“Zubat”、“Eevee”、“Magmar”、“Pikachu”};
int类型[5]={0,0,0,0};
int i;
int a=0;
//从0到4的随机数生成器
srand(时间(空));
i=(rand()%5);
//打印出口袋妖怪的名字
printf(“出现了一个野生的%s!\n”,口袋妖怪[i]);
类型[pokemon[i]]+=1;
对于(a=0;a直线:

type[pokemon[i]] += 1;
这是不正确的

pokemon[i]
具有类型
char*
;即它是一个指针,不应用于索引
type
数组。我想您的意思是用
i
索引
type
数组。它应该是

type[i] += 1;
另外,打印类型的循环是错误的。它迭代了6次,但是
type
数组只有5个元素(
0..4
包含在内)。最后,
printf
函数希望将格式字符串作为第一个参数(从时间开始它就有),因此它应该是:

for(a = 0; a < 5; a++) {
    printf("%d\n", type[a]);
}
(a=0;a<5;a++)的
{
printf(“%d\n”,类型[a]);
}
三件事:

  • 使用行
    type[pokemon[i]]+=1;
    尝试传递字符串作为数组的索引。您应该做的是
    type[i]

  • for(a=0;a在您的示例中,
    i
    表示生成的pockemon索引。如果它是随机生成的,即它的值为3,则表示称为“Magmar”的pockemon(
    pockemon[3]
    )。类型数组保存捕获的口袋妖怪的数量,因此它必须由pockemon索引本身索引,而不是由没有意义的字符串数组的位置索引

    正确的
    类型[pokemon[i]+=1;

    输入[[i]+=1;

    “我的讲师教授的是过时的C语言版本,所以请注意打印格式。”这是什么意思?你使用的C语言版本不会那么过时:你使用的是内联注释,直到C99才在标准中出现。间接寻址的问题就在这里
    输入[pokemon[i]]+ = 1;<代码> >简单地替换代码>代码>类型[i] +=1;< /Code >,因为Pokimon [i]是char数组。你可能在C++中考虑<代码> CUT<代码>使用“代码> Prtff<代码>。为什么在新行之前立即打印一个空格字符?我不知道Pokimon(i1)是指针,谢谢你的解释。
    
    for(a = 0; a < 5; a++) {
        printf("%d\n", type[a]);
    }