2014-12-05 45 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