0

我有一个小的 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 语言还很陌生,所以想不出可以给我想要的输出的棘手和小东西。任何建议将不胜感激。

4

1 回答 1

0

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

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

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

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

然后调用 qsort:

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

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

于 2013-05-26T09:17:07.260 回答