0
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 循环中实现数组。

4

4 回答 4

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()参数会发生什么<1added(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 调用它,它会正确地修改数组。

于 2013-10-21T14:04:57.460 回答
1

您使用iinmain但您打算使用j,我怀疑。

于 2013-10-21T14:02:36.493 回答
1

您从未调用过added,您从未初始化,int m[1000];因此默认情况下整个数组都有0- 您使用iinmain而不是j. Return 在 for 循环内。

于 2013-10-21T14:06:44.153 回答
1

您不是从中返回数组added(),而是从数组中返回一个元素m[1]。该函数将m[1]在循环的第一次迭代时返回for。在for循环的第一次迭代中i = 1m[1]无论是什么,input函数都会返回m[1]return m[1]

中的另一个问题main(),您正在使用m[i]但未imain().

于 2013-10-21T14:14:14.190 回答