检查数组中的值是否为偶数,如果true,则返回true

时间:2017-04-20 18:40:37

标签: c algorithm function loops

这是我到目前为止所做的,但无论数组内部是否有奇数或偶数,结果总是为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;
            }
        }
    }
}

3 个答案:

答案 0 :(得分:4)

如果要遵循C标准,则可能无法在另一个函数中定义函数。

然而,你的函数的主要问题(除了语法错误,例如语句的无效)是使用数组的第一个元素的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 )

答案 1 :(得分:1)

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

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

...

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

接下来,您需要移动

return false;
在for循环之外的

或者它永远不会遍历第一个条目。

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

答案 2 :(得分:1)

因为你在最后的迭代中返回它。检查整个阵列时,应该返回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
}