没有输出显示到终端,但值显示在GDB中

时间:2016-08-03 00:49:21

标签: c

我目前正在编写调试艺术这本书。我已经输入了第一个练习的代码,我应该接收到终端的输出。当我运行程序时,什么都没有出现。但是,当我查看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();
}

提前致谢, 杰西

1 个答案:

答案 0 :(得分:1)

该程序取决于传递的参数!

它完全有效,但你需要传递它的参数。

正如代码顶部注释中的用法所示:

  

//用法:insert_sort num1 num2 num3 ...,其中num是

的数字

试试吧!