我有一个小的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);
现在,当您遍历数据数组时,将对其进行排序。