2014-10-11 55 views
-1

所以我想獲得一堆數字,然後在我的C++控制檯應用程序中按升序打印它們。這是代碼。我的C++迭代將無法正常工作

void test_compare() 
{ 
    int amount; 
    amount = 10; 
    double num[amount]; 
    double dummy[amount]; 
    double smallest; 
    int i; 
    int inside_iterator; 
    for(i=0;i<amount;i++) 
    { 
     cout << "Number " << i+1 << ": "; 
     num[i] = get_double(); 
     cout << endl; 
    } 
    for(i=0;i<amount;i++) 
    { 
     for(inside_iterator=i;inside_iterator<amount;inside_iterator++) 
     { 
      if (inside_iterator == i) 
      { 
       smallest = num[inside_iterator]; 
      } 
      else 
      { 
       if (num[inside_iterator] < smallest) 
       { 
        smallest = num[inside_iterator]; 
       } 
      } 
     } 
     dummy[i] = smallest; 
    } 
    for(i=0;i<amount;i++) 
    { 
     cout << endl << dummy[i] << endl; 
    } 
} 

我知道,這是一個拗口...... 但是當我運行它,它四周輸出的最後一個號碼。我做了一些試圖找出問題的線索,但沒有出現。

感謝任何有幫助的人。

+0

使用'std :: sort'。聲明變量接近使用('int i = 0;'而不是'int i; ... i = 0;'等)不要使用非標準的VLA;如果它具有運行時大小,則使用'std :: vector'。 – chris 2014-10-11 00:07:27

+0

你的邏輯似乎對我有缺陷:首先你在'num'的所有​​元素中尋找最小的數字,並將其寫入'dummy [0]'中。然後,將num的第二個到最後一個元素中的最小數字寫到「dummy [1]」中。然後是num的第3個到最後一個元素中的最小數字到「dummy [2]」。等等......爲什麼要給你一個有序的數字列表?您將按照它們在'num'中出現的順序從待搜索數字集中刪除數字。如果你想這樣做,那麼你必須刪除你找到的號碼。但即使泡沫排序更有效率... – Oguk 2014-10-11 00:15:34

回答

0

試試這個。您需要將「if(num [inside_iterator] <」中的值替換爲「

int main() 
{ 
     int amount; 
    amount = 10; 
    double num[amount]; 
    double dummy[amount]; 
    double smallest; 
    int i; 
    int inside_iterator; 
    for(i=0;i<amount;i++) 
    { 
     cout << "Number " << i+1 << ": "; 
     num[i] = get_double(); 
     cout << endl; 
    } 
    for(i=0;i<amount;i++) 
    { 
     for(inside_iterator=i;inside_iterator<amount;inside_iterator++) 
     { 
      if (inside_iterator == i) 
      { 
       smallest = num[inside_iterator]; 
      } 
      else 
      { 
       if (num[inside_iterator] < smallest) 
       { 
        double tmp = smallest; 
        smallest = num[inside_iterator]; 
        num[inside_iterator] = tmp; 
       } 
      } 
     } 
     dummy[i] = smallest; 
    } 
    for(i=0;i<amount;i++) 
    { 
     cout << dummy[i] << endl; 
    } 

    return 0; 
} 
+0

它的工作,但你可以進一步擴大發生了什麼事嗎?而且,順便說一句,我如何評價你? – null 2014-10-11 05:36:53

+0

基本上,你想要做的是與num [inside_iterator]交換最小。你錯過了交換。 – toutnom 2014-10-11 10:18:16

+0

非常感謝你!不幸的是,它說我需要15個代表投票你... – null 2014-10-11 15:28:13