任何人都可以帮我理解这段代码有什么问题吗?

Mic*_*eli 0 c arrays return function

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;
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试从函数返回数组.为什么不工作?在for循环中实现了数组.

nhg*_*rif 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]; 
    }
}
Run Code Online (Sandbox Code Playgroud)

我用几种不同的语言编写代码,所以我不确定这是否实际上是一个问题,但你的return陈述是在一个for loop.在许多语言中,这将无法编译,因为您的added()函数没有return针对每个可能的执行路径的语句.如果您发送added()参数会发生什么<1added(0)或任何否定int将永远不会进入for循环,所以added()在没有a的情况下到达函数的末尾return statement.

此外,与return内部的for loop和外部的if声明,保证能让你只返回第一个结果for循环,所以你可能也只是做一个嵌套的if语句或什么的.

那是你的if陈述. if(i>0 && input % 2).在&&返回true时,两半也可以返回true(这是你唯一的一次if是执行语句).在这种情况下,每次i>0返回true都是i非零正整数.这里没问题.同时,input % 2不返回布尔值.它将返回一个int,在这种情况下,它将返回01.它将返回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;
}
Run Code Online (Sandbox Code Playgroud)

然后你所要做的就是added()从main 调用它会正确地修改数组.