首先,我甚至不确定你是否称其为会员,想不出更好的词汇。
我正在尝试学习调试和数组的基础知识 - 所以我想在内存中创建类似于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]应为5
。 6 > 5
所以我们应该输入在数组左边找到第一个较小数字的函数。
在我的调试会话中,条件似乎是FALSE
所以我根本不输入goleft
。更具体地说,Step into
忽略它,测试printf也没有被执行。我假设数组比较没有正确写入,更正是什么?
WHOLE CODE如果有人想看到其他可能的错误。
提前谢谢!
编辑:<= num_inputs
是正确的,不知怎的,我认为for
有(range1, range2, change)
而不是(start, condition, change)
。无论如何,现在问题似乎是我的goleft
函数执行do-while
周期一次太多,尽管它不应该超过这个条件。
EDIT2:修复了其他一些错误。
我在main
的打印现在是for( ; i <= num_inputs-1; )
我的goleft
因条件而进行了太多迭代,已修复为... while ( a >= 0 && array[a] > array[b] )
我的findingsmaller
仅在下一个数字较小时才会运行,但在数字较大时不执行任何操作。例如,对于6 8
,程序将无法正常运行。添加了else {a++}
对于对比较变化感兴趣的任何人,我已修复code。
答案 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. */
我没有进行太多测试,但这应该可以使您的程序正常工作。