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

时间:2013-10-21 14:00:07

标签: c arrays function return

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 个答案:

答案 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,在这种情况下,它将返回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(),它会正确地修改数组。

答案 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()