2014-12-05 51 views
0

所以我對這個程序有點麻煩。代碼的要點是將名爲grades.txt的數字列表輸入到大小爲28的數組中,然後冒泡排序並輸出所述數組。C++ Bubble Sorting一個輸出不同數字的數組

我已經研究過關於此的其他線程,並試圖實現他們的解決方案,很少或沒有成功。

我在氣泡排序之前和之後輸出數組,並且它完美地列出了數組。嘗試輸出排序後的數組時遇到問題。它不是按順序列出數字,而是給出數字,例如0,0,0,0,0,0,0,0,0,1,8,66,2292876,3012834等等。

我真的很想讓這個程序工作,任何和所有的幫助將不勝感激。

P.S.我打算將這些代碼編寫爲單獨的函數,並添加其他內容。這只是一個初步的步驟,我想要解決這個問題,所以我不必處理幾十行代碼來進行調試。

#include <iostream> 
    #include <fstream> 
    #include <iomanip> 
    using namespace std; 
    #define SIZE 28 


    int main() 

    { 
     int array[SIZE], X; 
     ifstream data; 
     data.open("grades.txt"); 
     data >> array[X]; 

    while(! data.eof()) 
    { 
    data >> array[X]; 
      cout << array[X] << endl; 
     } 
     data.close(); 

    cout << "\n\n\nContinue!\n\n\n"; 
    cin.get(); 


int i, j, tmp; 
for (i = 0; i < SIZE - 1; ++i) 
     { 

for (j = 0; j < SIZE - i - 1; ++j) 
    { 
    if (array[j] > array[j + 1]) 
     { 
      tmp = array[j]; 
      array[j] = array[j + 1]; 
      array[j + 1] = tmp; 
     } 
    } 
} 



    for(int C = 0; C < SIZE; C++) 
    cout << array[C] << endl; 

    return 0; 
    } 
+0

您需要在while循環中給'X'一個值並增加'X'。我不確定程序如何編寫它應該首先打印未排序的數組。如果我沒有記錯,'int x'不是默認初始化的。 'int X = 0'並且在while循環'++ X'的每次迭代開始時。由於在進入循環之前有一個'data >>數組[X]'。 – Ares 2014-12-05 03:36:44

+0

@Zaphod工作得很好。非常感謝! – DeltaWolf 2014-12-05 03:43:52

回答

0

在使用索引數組之前,您不會初始化X。然後,在將數據讀入數組後,您從未將 增量爲X,因此所有輸入數字都是 被存儲在同一位置。每一個都會清除之前讀取的 的內存。

出現,你是能夠打印原始數組 正確的唯一原因是,你打印每次即時讀取值之後你讀它, 之前消滅它通過在該位置存儲的下一個值。 如果您有單獨的函數來加載數組並打印數組, 將在輸入循環完成後發生打印循環,您將看到只有 輸入有多糟糕。

您可能會認爲這是https://codereview.stackexchange.com/的問題。 這個錯誤的主要原因是你的編程風格,其中 坦率地需要大量的工作。 (沒什麼值得羞恥的,你在這個新的 ,你還沒有學過繩索。) 我在前面的 段落中提到的函數(輸入與輸出)的分離是編程風格。 同樣,未初始化的變量,如果您使用了更好的樣式的循環控制邏輯,那麼該變量的可能性就會小得多。

+0

嘿,是的,你釘了它。我現在只用C++玩了幾個月。函數和具體參數傳遞是我正在努力的事情。感謝您對網站的更正。 – DeltaWolf 2014-12-05 03:47:53