函数中的数组成员比较不起作用

时间:2015-12-04 23:17:03

标签: c arrays pointers

首先,我甚至不确定你是否称其为会员,想不出更好的词汇。

我正在尝试学习调试和数组的基础知识 - 所以我想在内存中创建类似于insert-sort的东西(这样就会出错),然后调试程序。

void findingsmaller (int *array, int num_inputs){
    int a = 0;
    int b = 1;

    for ( b=1; b == num_inputs-1; b++ ) {
        if ( array[a] > array[b] ) {
            goleft(array, a, b);
            a++;
        }
    }
}

假设我们在数组中有这个:6 5 3 1 8 7 2 4。 array [a]应为6,array [b]应为56 > 5所以我们应该输入在数组左边找到第一个较小数字的函数。

在我的调试会话中,条件似乎是FALSE所以我根本不输入goleft。更具体地说,Step into忽略它,测试printf也没有被执行。我假设数组比较没有正确写入,更正是什么?

WHOLE CODE如果有人想看到其他可能的错误。

提前谢谢!

编辑:<= num_inputs是正确的,不知怎的,我认为for(range1, range2, change)而不是(start, condition, change)。无论如何,现在问题似乎是我的goleft函数执行do-while周期一次太多,尽管它不应该超过这个条件。

EDIT2:修复了其他一些错误。

  1. 我在main的打印现在是for( ; i <= num_inputs-1; )

  2. 我的goleft因条件而进行了太多迭代,已修复为... while ( a >= 0 && array[a] > array[b] )

  3. 我的findingsmaller仅在下一个数字较小时才会运行,但在数字较大时不执行任何操作。例如,对于6 8,程序将无法正常运行。添加了else {a++}

  4. 对于对比较变化感兴趣的任何人,我已修复code

3 个答案:

答案 0 :(得分:2)

而不是b == num_inputs - 1,您应该将b < num_inputs置于for循环条件中。由于在循环的第一次迭代中相等性不正确,因此它会立即中断。

答案 1 :(得分:2)

只要条件为True,就会执行for循环。

for ( ;Condition; )
{
// body
}

在for循环中,如果输入大于1,则条件始终为False。

答案 2 :(得分:-1)

我看了一下你的代码,我注意到一些不起作用的东西。

while (scanf("%d", &array[i]) != EOF)

正如函数scanf的文档所说:

  

错误的返回值为EOF

即使只有3个输入,你的while条件也让你的num_imputs达到200。我会用'\ n'替换EOF。

 while (scanf("%d", &array[i]) != '\n') /* stop when the user input '\n' you    
 can replace with any character you want to make it stop. */

我没有进行太多测试,但这应该可以使您的程序正常工作。