【问题标题】:Can anyone help me understand what's wrong with this code? [closed]谁能帮我理解这段代码有什么问题? [关闭]
【发布时间】:2013-10-21 14:00:07
【问题描述】:
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循环中实现数组。

【问题讨论】:

  • 你从来没有真正调用过你的函数,这是最明显的事情。
  • 也许你应该打电话给added()
  • added 中也缺少大括号。
  • input % 2odd 数字评估为 true,这似乎与评论相矛盾。
  • added 中的return 语句位于for 循环内,因此如果input &gt;= 1 成立,它将在第一次迭代时被命中。如果input &lt; 1 成立,则added 有一个未定义的返回值。

标签: c arrays function return


【解决方案1】:

您的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() 发送参数&lt;1 会发生什么? added(0) 或任何否定的int 永远不会进入for 循环,因此added() 在没有return statement 的情况下到达函数的末尾。

此外,您的returnfor loop 内和if 语句之外,保证只返回第一个for 循环的结果,所以您不妨只做一个嵌套@ 987654344@声明什么的。

然后是您的if 声明。 if(i&gt;0 &amp;&amp; input % 2)&amp;&amp; 返回 true,而两半也返回 true(这是您的 if 语句唯一执行的时间)。在这种情况下,i&gt;0 每次 i 是一个非零正整数时都会返回 true。这里没问题。同时,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(),它会正确地修改数组。

【讨论】:

    【解决方案2】:

    你在main 中使用了i,但我怀疑你的意思是使用j

    【讨论】:

      【解决方案3】:

      您不是从added() 返回一个数组,而是从该数组返回一个元素m[1]。该函数将在for 循环的第一次迭代中返回m[1]。 在for 循环i = 1 的第一次迭代中,因此m[1] 将是input 的任何内容,并且该函数将在return m[1] 返回m[1]

      main() 中的另一个问题,您使用的是m[i],但i 未在main() 中定义。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 请注意,它是零初始化的,因为它是static
        猜你喜欢
        • 2020-08-13
        • 1970-01-01
        • 2011-08-15
        • 2021-01-07
        • 2020-10-29
        • 1970-01-01
        • 2021-07-14
        • 1970-01-01
        • 2022-06-10
        相关资源
        最近更新 更多