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;
}
'n'用于第一个'for'循环没有被初始化。 – sgarizvi 2013-02-14 06:45:36
如果警告已启用,那么应该由编译器捕获。在Linux上,使用'gcc -Wall -g'进行编译,并学习使用调试器'gdb';你应该启用警告并使用你的调试器。 – 2013-02-14 06:46:52
@Student ...初始化意思是为变量赋值/赋值。目前,当你使用'n'的值是未知的。在你当前的代码中,你可以初始化为'int n = 20;' – sgarizvi 2013-02-14 06:51:58