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