您的main函数for loop对名为 的变量进行了迭代j,但循环体正在尝试使用名为 的未定义变量i。
您的main函数甚至从不调用您的added()函数。
此外,您的added()功能也有问题。
int added(int input){
for(int i=1;i<= input; i++){
if(i>0 && input % 2) // checking if the numbers are even...
m[i]= input; //array implementation
return m[i];
}
}
我用几种不同的语言编码,所以我不确定这是否真的是一个问题,但你的return陈述在for loop. 在许多语言中,这不会编译,因为您的added()函数没有return针对每个可能的执行路径的语句。如果您发送added()参数会发生什么<1? added(0)或者任何负数int都不会进入for循环,所以在没有 .added()的情况下到达函数的末尾return statement。
此外,在语句的return内部for loop和外部if,保证只返回第一个for循环的结果,所以你也可以只做一个嵌套if语句或其他东西。
然后是你的if陈述。 if(i>0 && input % 2). 当两半也&&返回时返回(这是您的语句唯一执行的时间)。在这种情况下,每次返回都是一个非零正整数。这里没问题。同时,不返回布尔值。它将返回一个,在这种情况下,它将返回or 。它将返回偶数和奇数。事实证明,整数在此处被评估为 a并且非零整数被评估为因此这可能与您想要的相反。您需要更改为可能。truetrueifi>0trueiinput % 2int01010boolean falseboolean trueinput % 2((input % 2) == 0)
最后,如果m[]被全局声明,你实际上不需要return任何东西。 main()并且added()都可以很好地看到变量。您可以将函数修改为如下所示:
void added(int input){
for(int i=1;i<= input; i++){
if(/*i will always be >0 in this for loop*/(input % 2) == 0)
m[i]= input;
}
return;
}
然后你所要做的就是added()从 main 调用它,它会正确地修改数组。