2015-07-05 43 views
0
const int N = 5; 

int person[] = {2, 3, 12, 5, 19}; 
int big = 0; 
int small = 100; 
int i; 

for (i = 0; i <= N; i++) 
{ 
    cout << "Person[" << i << "] ate: " << person[i] << endl; 
    //cin >> person[i]; 

    for (int j = i+1; j <= N; j++) 
    { 
     if (person[i] < person[j]) 
     { 
      int tmp = person[i]; 
      person[i] = person[j]; 
      person[j] = tmp; 
     } 
    } 
      if (person[i]>big) 
     big=person[i]; 
    if (person[i]<small) 
     small=person[i]; 
} 
    cout << "Person[" << i << "] ate the most pancakes: " << big << endl; 
    cout << "Person[" << i << "] ate the least pancakes: " << small << endl; 

    cout << "Sorted:" << endl; 
    for (i = 0; i < N; i++) 
    { 
     cout << "Person[" << i << "]: " << person[i] << endl; 
    } 




    system("pause"); 

output陣列弄亂C++

哪裏弄亂了這些陣列它保持顯示我2但泡沫排序作品。另一個問題是如何從最小值和數組索引中獲取最高值的數組索引?

+3

問題是你要走出界限,而不是'i <= N'和'j <= N'你需要:'i

+0

*如何從最小值獲取數組索引並從最高值獲取數組索引?* - ['std :: minmax_element'](http://en.cppreference.com/w/cpp/algorithm/minmax_element) – chris

回答

1

在C++數組中有ZERO0indexed。所以,你應該改變你對這樣的循環:

for (i = 0; i < N; i++) 
      ^^^ 
{ 
    // some code... 
    for (int j = i+1; j < N; j++) 
         ^^^ 
    { 
     // some code... 

因爲:

index -> 0 1 2 3 4 
person[] = {2, 3, 12, 5, 19}; 

在你的代碼i價值和j將增加多達N這是5。這意味着你正試圖訪問名爲person的第五個索引,它將創建數組索引超出限制的錯誤。

1

數組索引從零開始,因此如果存在N元素,則最後一個元素將位於N-1索引處。索引N上的訪問元素超出了界限。

for (i = 0; i <= N; i++)//should run till `N-1` 
       ^^^ 

for (int j = i+1; j <= N; j++)//should run till `N-1` 
        ^^^ 

如果你想要的最高和最低的元素索引,因爲你已經排序的數組,最小的值的指數會是0和價值最高的指數將N-1(相反,你的情況,因爲你已經排序按降序排列)