2017-10-18 45 views
0

我想按照標題中所述的方式引入我的程序的二進制搜索功能。但不斷得到兩個我不知道如何解決的錯誤。定義數組的錯誤

這是編譯錯誤,我得到了我的代碼:

: 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

如果你想聲明一個數組的初始值,那麼你必須在它的聲明中這樣做。在其他地方,您只能分配給單個元素,而不能分配給整個數組。此外,假設控制在binarySearch()函數中傳遞出'while'循環。如果在這種情況下你可以確定'array [first]> array [last]',那麼你應該*無條件地*返回'-1'。否則,您必須在該條件不成立的情況下指定返回值。 –

+0

'array [size] = {1,3,6,8,12,13,16};'在C中沒有意義。你想通過這個做什麼? – AnT

回答

1

取出array[size]={1,3,6,8,12,13,16};。你不能在聲明後初始化數組的值。但只在減速時。正確的代碼是

int array[]={1,3,6,8,12,13,16}; 

另外聲明尺寸宏恆定。我認爲它更好。它會看起來像

#define size 7 

一切看起來不錯!

+0

謝謝。有效。但是,爲什麼我無法初始化數組的值,如: 'int array [size] = {1,3,6,8,12,13,16};' – oxodo

+0

因爲您試圖將一組值分配到單個變量數組[[size]或數組[7]中)。這就是它顯示錯誤的原因。如果此解決方案有幫助,請檢查答案是否正確謝謝 –

+0

@oxodo:「不能」是什麼意思?如果'size'是一個常量,那麼你*就能做到。如果'size'不是恆定的,那麼你將無法做到,因爲VLA不接受初始化器。你的情況是什麼? – AnT

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只能通過6

具有元素0顯然,你的意思是到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}; 

既然你已經初始化array具有7個元素,你不必告訴編譯器有多少元素它都有;大小是自動爲您確定的。 (這是爲數不多的事情Ç會幫忙,爲你做一個。)

現在你可以定義

const int size = 7; 

但你不得不爲arraysize仔細更新初始化在一起,並確保他們是一致的。相反,你可以計算大小:

const int size = sizeof array/sizeof array[0];