【发布时间】:2015-01-29 19:07:31
【问题描述】:
我正在开发一个程序,该程序从重定向文件中获取输入并将该文件中的整数存储到一个动态数组中,直到 -999 被读取,如果我们尝试将更多的值放入其中,它应该会增长它当前的大小。
我将这些值粘贴到执行二进制搜索的函数中,该函数返回找到的位置和查找所需的比较量。
但是,当我运行它时,我会从所有空格中获取数组中的所有值,包括零。因此我的位置变量和比较变量被抛弃了。它不是函数,因为它与硬编码数组完美配合。
所以我的问题是,有没有办法摆脱数组的那部分? 谢谢
int var;
int counter = 0;
int *orgarr;
int size = 10;
orgarr = (int *) malloc (size * sizeof(int) );
int *tempo;
tempo = (int *) malloc (size * 2 * sizeof(int));
int i;
for ( i = 0 ; i < size ; i++)
tempo[i] = orgarr[i];
free (orgarr);
orgarr = tempo;
size = size * 2;
while (var != -999) {
scanf("%i", &var);
if (var != -999){
orgarr[counter] = var;
}
counter++;
}
for (i = 0; i < size; i++) {
printf("%i", orgarr[i]);
}
【问题讨论】:
-
搜索调用是......在哪里?我的水晶球告诉我你的搜索参数限制是
[0..size);他们应该是[0..counter)。 在读取输入时 使用动态调整大小来构建数组,并且仅根据实际read 条目的数量执行搜索。这样你就解决了两个问题,你的“数组大于条目数”问题,以及当数组对于条目数来说太小时,未定义行为的即将到来的厄运。 -
var未初始化为while (var != -999)之前的任何值。 -
@WhozCraig 你是对的,我确实有从 0 到大小的参数。您将如何构建它以根据输入来调整大小?
-
@chux 我的印象是我不需要在任何地方初始化它,因为它会随着数字的读取而不断变化。
-
@Rbutler93 如果没有预先设置
var,第一次执行while (var != -999)的结果应该是什么?var可以有任何值:-999、其他整数或引发异常并停止程序的特殊陷阱值。确实,var随后会因scanf("%i", &var)而发生变化,但那是在while测试之后。
标签: c arrays dynamic binary-search