我想在标题中介绍一个二进制搜索功能到我的程序。但是继续得到两个错误我不知道如何解决。
这是我为我的代码获得的编译错误:
: expected expression before '{' token
array[size]={1,3,6,8,12,13,16};
^
upg10.8.c: In function 'binarySearch':
upg10.8.c:55:7: warning: control reaches end of non-void function [-Wreturn-
type]
}
^
在两种情况下都知道导致问题的原因是什么? 您可以在下面找到以下代码:
#include <stdio.h>
#include <stdlib.h>
int binarySearch(int n, int array[], int search);
int main(void){
int search, size=7, array[size], middle;
array[size]={1,3,6,8,12,13,16};
printf("input search number:\n");
scanf("%d", &search);
middle = binarySearch(size, array, search);
if(middle ==-1){
printf("There is no index corresponding to that search number");
}
else{
printf("Index %d for Search%d", middle, search);
}
return 0;
}
int binarySearch(int n, int array[], int search){
int first =0;
int last = n-1;
int middle= (first+last)/2;
while(first<=last){
if(array[middle]<search)
first= middle +1;
else if(array[middle]==search){
return search;
}
else
last = middle -1;
middle = (first +last )/2;
return middle;
break;
}
if(array[first]>array[last])
return -1;
}
答案 0 :(得分:1)
删除array[size]={1,3,6,8,12,13,16};
。声明后,您无法将值初始化为数组。但只是在减速时。正确的代码是
int array[]={1,3,6,8,12,13,16};
同时将size声明为宏常量。我认为它更好。它看起来像
#define size 7
其他一切看起来都不错!!
答案 1 :(得分:0)
int search, size=7, array[size], middle;
您已在此定义了数组对象array
。请注意,大小不是常量,因此这是一个VLA(可变长度数组)。并非所有编译器都支持VLA,而且您在这里不需要。
array[size]={1,3,6,8,12,13,16};
这有几种错误。
array[size]
将是array
的元素7 - 但array
只有0到6的元素。
你显然是要将7个值{1,3,6,8,12,13,16}
分配给array
的7个元素,但是你不能这样做。事实上,可以初始化数组对象,但不能将它们分配(出于复杂的历史原因)。
{1,3,6,8,12,13,16}
不是表达式,因此它无法显示在作业的右侧,无论左侧是什么。它是一个有效的初始化程序。
删除size
的定义并将array
的声明更改为:
int array[] = {1,3,6,8,12,13,16};
由于您已使用7个元素初始化array
,因此您不必告诉编译器它有多少元素;大小是自动确定的。 (这是C将为你做的少数几件事之一。)
现在你可以定义
const int size = 7;
但是您必须仔细更新array
和size
的初始值设定项,并确保它们保持一致。相反,您可以计算尺寸:
const int size = sizeof array / sizeof array[0];