您的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并且非零整数被评估为因此这可能与您想要的相反。您需要更改为可能。true
true
if
i>0
true
i
input % 2
int
0
1
0
1
0
boolean false
boolean true
input % 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 调用它,它会正确地修改数组。