我有一个小的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还是很陌生,所以无法想到一些棘手的小东西,可以为我提供所需的输出。任何建议将不胜感激。

最佳答案

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

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

假设X是指向“数据”类型为“物”的数组的指针

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

然后致电qsort:

qsort(数据,sizeof(事物),number_of_thingss_in_data,packetSorter);

现在,当您遍历数据数组时,将对其进行排序。

10-08 09:27