2013-05-26 91 views
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相當陌生,所以無法想到一些棘手的問題,可以給我想要的結果。任何建議將不勝感激。

+0

一個簡單的方法是將所有'x's'放入數組中並調用'bsearch()'將它們排序。但是你的例子中缺少太多的東西來提供詳細的答案。 – chux

+1

糟糕 - 我的意思是說'qsort()'不''bsearch()'。晚了。對不起 – chux

回答

0

在開始循環之前使用qsort對數組進行排序。不知道X是什麼類型,我實際上無法編寫代碼。

另外,你並不是每個人都在改變x,所以我不確定你爲什麼會看到任何不同。

假設X是一個指針到稱爲 「數據」,這是類型的 「東西」

INT packetSorter(常量無效*一個,常量無效* b)一種陣列 { 如果(((事*) a) - >數據包>((thing *)b) - >數據包) return 1; else if(((thing *)a) - > packets ==((thing *)b) - > packets) return 0; else return -1; }

然後調用的qsort:

的qsort(數據,的sizeof(事),number_of_thingss_in_data,packetSorter);

現在,當你瀏覽你的數據數組時,它將被排序。

+0

'X'是一個指向包含三個成員,包,字節和應用程序名稱的結構的指針 –

+0

唯一我無法弄清楚的是如何創建由應用程序,包和字節組成的數組。我認爲數組中的數據包也可以做到這一點。 –

+0

你有一個結構數組,所以你已經有了這些東西,因此 - >包 – xaxxon