我目前正在编写调试艺术这本书。我已经输入了第一个练习的代码,我应该接收到终端的输出。当我运行程序时,什么都没有出现。但是,当我查看GDB中的变量时,我可以正确地看到参数的值。
主要关注的是print_results()
功能。它不会在屏幕上打印任何内容。有人可以帮忙吗?我在运行Linux(Debian和Lubuntu)的两台不同机器上试过这个。
以下是代码:
// insertion sort, several errors
// usage: insert_sort num1 num2 num3 ..., where the num are the numbers to
// be sorted
#include <stdio.h>
#include <stdlib.h>
int x[10], // input array
y[10], // workspace array
num_inputs, // length of input array
num_y = 0; // current number of elements in y
void get_args(int ac, char **av)
{ int i;
num_inputs = ac - 1;
for (i = 0; i < num_inputs; i++)
x[i] = atoi(av[i+1]);
}
void scoot_over(int jj)
{ int k;
for (k = num_y; k > jj; k--)
y[k] = y[k-1];
}
void insert(int new_y)
{ int j;
if (num_y == 0) { // y empty so far, easy case
y[0] = new_y;
return;
}
// need to insert just before the first y
// element that new_y is less than
for (j = 0; j < num_y; j++) {
if (new_y < y[j]) {
// shift y[j], y[j+1],... rightward
// before inserting new_y
scoot_over(j);
y[j] = new_y;
return;
}
}
// one more case: new_y > all existing y elements
y[num_y] = new_y;
}
void process_data()
{
for (num_y = 0; num_y < num_inputs; num_y++)
// insert new y in the proper place
// among y[0],...,y[num_y-1]
insert(x[num_y]);
}
void print_results()
{
int i;
for(i=0; i < num_inputs; i++)
printf("%d\n", y[i]);
}
int main(int argc, char ** argv)
{ get_args(argc,argv);
process_data();
print_results();
}
提前致谢, 杰西
答案 0 :(得分:1)
该程序取决于传递的参数!
它完全有效,但你需要传递它的参数。
正如代码顶部注释中的用法所示:
//用法:insert_sort num1 num2 num3 ...,其中num是
的数字
试试吧!