2017-10-15 30 views
-1

我計算數字的發生,結果是準確的,右:使用數組和運行時檢查失敗#2-S,Visual Studio的C++

#include <iostream> 
using namespace std; 
const int max = 51; 

int main() 
{ 
    int num = 0; 
    int array[max] = { 0 }; 
    cout << "Enter interger number from 0 to 50 and type in -1 to show occurence:"; 
    while (num!=-1) 
    { 
     cin >> num; 
     array[num] = array[num]+1; 
    } 
    cout << "all entered number are:" << endl; 
    cout << "Number\tFrequency" << endl; 
    for (num = 0; num < max; num++) 
    { 
     if (array[num]>0) 
     { 
      cout << num <<"\t"<< array[num] << endl; 
     } 
    } 
    return 0; 
} 

爲什麼在Visual Studio總是通知我的以下:

運行時檢查失敗#2-S,

enter image description here

+0

「運行時檢查失敗#2-S」並不意味着任何東西最多的人。請包括一個確切的錯誤信息,並通過調試來向我們展示您發現的內容。另外,顯示導致問題的輸入,以便重現,或者更好地將輸入硬編碼到程序中。 – chris

+2

你永遠不會檢查'num'是否超出界限:'array [num]'。 – user0042

+0

如果用戶輸入的任何數字大於50或小於0,則表示您超出範圍。 '-1'超出了'array [num] = array [num] +1;' – drescherjm

回答

0

num變量變爲-1時,您正在訪問數組元素超出範圍(array[-1]),從而調用undefined behavior,這會導致堆棧損壞。如果您接受大於50的輸入,則會發生同樣的情況。確保num變量保持在0..50邊界內。引入另一個變量來控制邏輯和while循環:

int controlvar = 0; 
int num = 0; 
int array[max] = { 0 }; 
std::cout << "Enter integer number from 0 to 50 and type in -1 to show occurence: "; 
while (controlvar != -1) 
{ 
    std::cin >> controlvar; 
    if (controlvar >= 0 && controlvar <= 50){ 
     num = controlvar; 
     array[num] = array[num] + 1; 
    } 
} 
+0

所以如果我仍然想使用數組,我的端點是-1,有沒有解決方案? –

相關問題