【发布时间】:2017-12-06 11:27:00
【问题描述】:
我正在尝试进行二进制搜索,以搜索有序的数字文件。虽然,即使在我将其转换为函数之前它在“main”中工作,但在我的 fseek() 之后它已经成功地产生了一些奇怪的行为。
有什么建议吗?
int BinarySearch(FILE *cp, char *CPR, int *position) {
int i, lines, current_line;
double CPR_number, CPR_check;
char CPR_check_string[CPR_LEN];
sscanf(CPR, "%lf", &CPR_number);
fseek(cp, 0L, SEEK_END);
lines = ftell(cp)/12;
current_line = ftell(cp)/2 - ((ftell(cp)/2) % 12);
for (i = 0; i < log10(lines)/log10(2); i++) {
fseek(cp, current_line, SEEK_SET);
/* Read CPR as string */
fscanf(cp, "%[0-9]", CPR_check_string);
/* Convert to number */
sscanf(CPR_check_string, "%lf", &CPR_check);
if (CPR_number == CPR_check) {
printf("This happens\n");
*position = ftell(cp);
return TRUE;
} else if (CPR_number < CPR_check) {
current_line = ftell(cp)/2 - ((ftell(cp)/2) % 12);
} else if (CPR_number > CPR_check) {
current_line = ftell(cp) + ftell(cp)/2 - ((ftell(cp) + ftell(cp)/2) % 12);
}
}
return FALSE;
}
它似乎没有运行其余的代码。
提前致谢。
【问题讨论】:
-
你能详细说明一下“奇怪的行为”吗?发生什么了?对于某些特定输入,预期和实际输出是多少?你怎么称呼这个函数?文件的内容是什么?文件是以二进制还是文本模式打开的?当您将位置除以 12 时,您是否正确计算换行符?请read about how to ask good questions,并学习如何创建Minimal, Complete, and Verifiable Example。
-
我试过 printf("test\n");在第一次 fseek 之前它工作了,但在它之后,它什么也不打印。我将函数称为:“if(BinarySearch(cp, CPR, &position))。该文件包含 9 行 10 位数字 + 换行符,即 12 字节 pr。行。这说明了吗?