2013-02-14 35 views
0

在這個C程序的,我做一個二進制搜索,我讀的是data.txt中分割的錯,是做一個二進制搜索數組

首先數組我試圖掃描的data.txt作爲數組 第二我使用插入排序算法來排序 第三我正在做數組的二進制搜索。我是C新手,我不知道我的代碼出錯了,謝謝你的幫助,讓我知道我做錯了什麼。

#include <stdio.h> 
#include <stdint.h> 
#include <stdlib.h> 


int main() 
{ 
int v, t, low, high, mid, search; 
int n = 20, array[20]; 
int p = 0; 
FILE *infile; 
infile = fopen(「data.txt」,」r」); 

while(!feof(infile)) 
{ 
    fscanf(infile,」%d」, &array[p]); 
    p++; 
} 


for (p = 0; p < n; p++) { 
    scanf("%d", &array[p]); 
} 

for (p = 1 ; p <= n - 1; p++) { 
    v = p; 

    while (v > 0 && array[v] < array[v-1]) { 
    t   = array[v]; 
    array[v] = array[v-1]; 
    array[v-1] = t; 

    v--; 
    } 
    } 
for (p = 0; p <= n - 1; p++) { 
    printf("%d\n", array[p]); 

printf("Please enter a value (-1 = done)>\n"); 
scanf("%d",&search); 

low = 0; 
high = n - 1; 
mid = (low+high)/2; 

while(low <= high) 
{ 
    if (array[mid] < search) 
     low = mid + 1;  
    else if (array[mid] == search) 
    { 
     printf("%d is located at %d in the array.\n", search, mid+1); 
     break; 
    } 
    else 
     high = mid - 1; 

    mid = (low + high)/2; 
} 
if (low > high) 
    printf("-1\n"); 

return 0; 
} 
+2

'n'用於第一個'for'循環沒有被初始化。 – sgarizvi 2013-02-14 06:45:36

+5

如果警告已啓用,那麼應該由編譯器捕獲。在Linux上,使用'gcc -Wall -g'進行編譯,並學習使用調試器'gdb';你應該啓用警告並使用你的調試器。 – 2013-02-14 06:46:52

+0

@Student ...初始化意思是爲變量賦值/賦值。目前,當你使用'n'的值是未知的。在你當前的代碼中,你可以初始化爲'int n = 20;' – sgarizvi 2013-02-14 06:51:58

回答

0

1)。用某個值初始化n( 2)。插入排序後(我猜)有一個printf來打印數組。在printf之後添加另一個大括號。如果你不這個程序繼續運行(除非你輸入一個字符,打破編),但現在它可能會工作,因爲你可以回來之前,它可以循環,但它仍然是一個主要問題..