我有一个小的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的新手,因此无法想到一些棘手的小东西,它可以给我所需的输出。任何建议将不胜感激。
答案 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);
现在,当您浏览数据数组时,它将被排序。