Closed. This question is off-topic. It is not currently accepting answers. Learn more
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
6年前关闭。
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循环中实现了数组。

最佳答案

您的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,在本例中,它将返回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;
}

然后您所要做的就是从main调用added(),它将正确地修改数组。

关于c - 谁能帮助我了解这段代码有什么问题? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19496592/

10-12 12:28