【问题标题】:Check if values in the array are even and if true return true检查数组中的值是否为偶数,如果为真则返回真
【发布时间】:2017-09-17 13:18:41
【问题描述】:

这是我到目前为止所做的,但无论数组内部是奇数还是偶数,结果始终为 1。我在做什么呢?

#include <stdio.h>
#include <stdbool.h>

int main(){
    int vector[10]={2,4,6,8,10,12,14,16,18,20};
    bool function(int i){
        for(i=0,i<10,i++){
            if(vector[i]%2==0){
                return true;
                }
            return false;
            }
        }
    }
}

【问题讨论】:

  • 你总是在第一次迭代中返回......即您的代码永远不会检查第一个元素之后的元素。
  • 你的意思是如果所有的值都是偶数吗?
  • AFAIK 嵌套函数是非标准 C.
  • 你的大括号不匹配......这不应该按原样编译。此外,在另一个函数中定义一个函数也不是标准的——充其量它依赖于编译器扩展。而且你永远不会调用该函数。也许发布真正的代码?
  • 从 1 开始。for 循环很乱 2. function 永远不会被调用 3. 最后你有一个额外的 }。 4. 你错过了int main 的回报等等..

标签: c algorithm function loops


【解决方案1】:

如果要遵循 C 标准,那么你不能在另一个函数中定义一个函数。

尽管如此,您的函数的主要问题(除了语法错误,例如无效的 for 语句)是对数组的第一个元素使用 return 语句,而不管它是奇数还是偶数。

程序可以如下所示

#include <stdio.h>
#include <stdbool.h>

bool is_even( const int a[], size_t n )
{
    size_t i = 0;

    while ( i < n && a[i] % 2 == 0 ) i++;

    return i == n;
}

#define N 10

int main( void )
{
    int vector[N] = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 };

    printf( "All elements are even: %d\n", is_even( vector, N ) );
}

考虑到根据 C 标准,不带参数的函数 main 应声明为

int main( void )

【讨论】:

    【解决方案2】:

    For 循环应该在条目之间使用;,而不是,。你永远不会循环。

    for(i=0;i<10;i++) 
    

    ...

    老实说,我希望您的编译器至少会对该语句发出警告,因为它缺少基本 for 循环的元素。

    接下来,你需要移动你的

    return false;
    

    在 for 循环之外,否则它永远不会遍历第一个条目。

    最后,在 main 中定义 function 在 C 中是不标准的。让它成为自己的函数,事情会更快乐。

    【讨论】:

    • 我按照您的建议进行了更正(感谢您指出逗号问题,这是我学习 C 的第一天,所以我犯了很多错误)但我不知道我是否应该将主要内容留空..这是测试程序的正确方法吗?或者也许我可以将 main 设为 bool 函数并继续?无论如何,结果又是 1,我可能遗漏了一些东西。当我构建文件时,CodeBlocks 没有显示任何警告..
    • 好的,现在我知道我做错了什么。我正在编辑其他 c 文件,而不是 main.c 。这就是为什么我没有收到警告,这就是为什么无论发生什么变化我总是得到相同的结果
    【解决方案3】:

    因为您要在最终迭代中返回它。当您检查整个数组而不是中间时,您应该返回false

    此外,您的函数从未被调用过,因此您可以使用 C 语义对其进行更新。

    #include <stdio.h>
    #include <stdbool.h>
    
    bool check_even(int vector[], int size){
        int i;
        for(int i=0; i<size; i++){
            if(vector[i] % 2==0) { 
               return true;
            }
            // return false; shift this to out of for block
         }
      return false;
    }
    
    
    int main(){
        int vector[10]={2,4,6,8,10,12,14,16,18,20};
    
        bool is_even = check_even(vector, 10); // here function will get called
    
        return 0 // always return with main
    }
    

    【讨论】:

    • @ryyker 拼写错误。更新了。
    • 我尝试遵循您的建议,当我运行文件时,它显示“进程返回 1 (0x1) 执行时间:0.016 秒”。这是我应该期待的吗?
    • 是的。 is_even 包含值,即真 (1) 或假 (0)。您可以使用printf("%d\n", is_even) 打印
    猜你喜欢
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 2019-09-28
    • 1970-01-01
    • 2021-10-15
    • 2022-12-04
    • 2023-03-13
    相关资源
    最近更新 更多