按数据包计数的升序打印输出

时间:2013-05-26 04:54:49

标签: c sorting printing structure

我有一个小的C代码段,如下所示:

    static void results(void)
   {
    int id;
    uint64_t packets, bytes;

    packets = 0;
    bytes = 0;

    if (x->option)
    {
            printf("\n App    Packets     Bytes");
            printf("\n --------------------------------\n");
    }

    for (id = 0; id < x->config_num_proto; id++)
    {
            if (x->option)
            {
                    if (x->packets)
                    {

                            printf(" %-12s%-12" PRIu64 "%" PRIu64 "\n", x->name
                                    , x->packets, x->bytes);
                    }
            }

         packets += x->packets;
         bytes += x->bytes;

     }

     printf("\n")

  }

输出如下所示:

  App  Packets   Bytes

  AB     312      44922

  CD      5        863

  EF      18      2160

  GH      9        574

  ..      ..        ..
  ..      ..        ..

我的目标是以相同的方式打印输出,除了数据包应按升序排列。我是C的新手,因此无法想到一些棘手的小东西,它可以给我所需的输出。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

在开始循环之前使用qsort对数组进行排序。不知道X是什么类型我实际上无法编写代码。

另外,你不是每次都在改变x,所以我不确定为什么你会看到任何差异。

假设X是指向名为“data”的数组的指针,该数组的类型为“thing”

int packetSorter(const void * a,const void * b) {   if(((thing *)a) - &gt; packets&gt;((thing *)b) - &gt; packets)     返回1;   否则if(((thing *)a) - &gt; packets ==((thing *)b) - &gt; packets)     返回0;   其他     返回-1; }

然后调用qsort:

qsort(data,sizeof(thing),number_of_thingss_in_data,packetSorter);

现在,当您浏览数据数组时,它将被排序。