2013-02-14 54 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之后添加另一个大括号。如果你不这个程序继续运行(除非你输入一个字符,打破编),但现在它可能会工作,因为你可以回来之前,它可以循环,但它仍然是一个主要问题..