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