int m[1000]; //declaring global array
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];
}
}
int main()
{
for(int j=2;j<54;j++){
printf("%d",m[i]);
putchar('\n');
}
return 0;
}
我正在尝试从函数返回数组。为什么不工作? 在for循环中实现了数组。
答案 0 :(得分:11)
您的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)
。当两半也返回&&
时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;
}
然后你所要做的就是从main调用added()
,它会正确地修改数组。
答案 1 :(得分:1)
您在i
中使用main
,但我怀疑您打算使用j
。
答案 2 :(得分:1)
您从未致电added
,您从未初始化int m[1000];
因此默认情况下整个数组都有0
- 您正使用i
中的main
编制索引,而非j
。返回在for循环中。
答案 3 :(得分:1)
您没有从added()
返回数组,而是从数组返回元素m[1]
。该函数将在m[1]
循环的第一次迭代时返回for
。
在for
循环i = 1
的第一次迭代中,m[1]
将是input
的任何内容,函数将在m[1]
返回return m[1]
main()
中的另一个问题,您使用m[i]
但i
未定义main()
。