2016-04-06 37 views
0

我是社區和編碼的新手。現在我正在學習CC的計算機科學入門課程,我們正在學習C++。無論如何,我必須創建一個程序,要求用戶輸入一個數字,這將是數組new_array的大小指示器。程序然後要求用戶逐一輸入數字,然後反向輸出。 #include using namespace std;C++:使用for循環來允許用戶輸入數組到數組

int main() 
{ 
cout << "How many numbers?\n"; 
int numbers; // holds amount of numbers to be entered into array 
cin >> numbers; 
int new_array[numbers]; 
for(int counter = 0; counter < numbers; counter++) 
{ 
    cout << "Enter number " << counter << endl; 
    cin >> new_array[counter]; 
} 

cout << "You entered: " << endl; 

for(int i = numbers; i >= 0 ; i--) 
{ 
    cout << new_array[i] << endl; 

} 

return 0; 
} 

我明白如何做到這一點,並在大多數情況下,我的程序工作。它輸出反向輸入的數字,但在輸出之前,它會輸出大的奇怪數字。例如,如果用戶輸入5作爲要輸入的數字的量,然後分別進入1, 2, 3, 46作爲5號碼,該程序輸出數4669476第一,然後反向陣列中輸出的數字。任何人都可以向我解釋我做錯了什麼,我該如何解決這個問題?先進的謝謝! PS要溫柔!我是一個新手

回答

1

此循環讀取出界:

for(int i = numbers; i >= 0 ; i--) 
{ 

如果按照i通過在你的頭上,你會看到你的輸出項numbers通過對0的時候,其實你應該輸出項numbers-1通過對0

另一種模式是:

for(int i = numbers; i--;) 

或者你可以使用傳說中的--> operator

可以「簡單」從numbers - 1開始,但是您使用的循環模式不適用於無符號計數器(因爲它們始終爲>= 0)。恕我直言,這是一個好主意,使用適用於所有類型的模式;那麼你將來不太可能犯錯。

0

在你的顯示器for loop中,你從i = numbers開始,它超出了數組的範圍。由於陣列從0 till size - 1開始,那麼您需要從i = numbers - 1開始一直到>=0

0

因爲你從沒有定義array[numbers]啓動。

array[0], array[1], ... array[numbers-1]定義。

0

在C數組是從0而不是1所以最後一個數字被存儲在array[4]

存儲因此,當你寫出來,你應該開始一個numbers - 1,而不是僅僅numbers

0

因爲你是從超出範圍給你的垃圾值開始的索引。

你的代碼應該是一些這樣的事

for(int i = numbers-1; i >= 0 ; i--) 
{ 
    cout << new_array[i] << endl; 
    }