2013-10-25 225 views
0

我有什麼似乎是一個非常簡單的,初學者的問題,我必須失去明顯的東西。我只是試圖提示用戶輸入一個4位數的數字,然後以數組的形式輸入輸入,並將數字分開。我認爲它與「cin >>輸入有關」[4]「我似乎無法得到正確的答案。堆棧周圍的變量已損壞

int main() 
{ 
int input[4];  //number entered by user 
cout << "Please enter a combination to try for, or 0 for a random value: " << endl; 
cin >> input[4]; 
} 

當我去運行它,我得到一個錯誤信息「堆棧周圍的變量被損壞。 我試圖尋找在其他問題類似的例子,但我似乎無法得到它的權利。我需要輸入作爲一個4位數字,然後將它分成4位數組。 如果有人可以幫助我將不勝感激

+1

'CIN >>輸入;'你想整個陣列,而不只是一個字符。也可以做'int n; cin >> n;'。請記住,有很多知識來了解'cin'錯誤管理。 – 2013-10-25 18:50:12

+0

@ebyrob'cin >> input'對於int類型的數組不起作用。 – 2013-10-25 19:27:48

+0

@ H2CO3是的,我意識到這一點。當我第一次讀它時,我在輸入之前錯過了意想不到的'int'。當然,如果你正確地使用了'int'到'c​​har input [4]'和註釋代碼行,它確實可以解決問題。 (也許不太合適)所以,當我注意到'int'我離開了它... – 2013-10-25 19:40:22

回答

2

您的數組的大小爲4,因此元素的指數爲0 .. 3;輸入[4]位於陣列尾部的後面,因此您正試圖修改未分配或分配給其他內容的內存。

這會爲你工作:

cin >> input[0]; 
cin >> input[1]; 
cin >> input[2]; 
cin >> input[3]; 

你並不需要一個ARRY輸入4位數字。

int in; 
int input[4]; 
cin >> in; 

if(in>9999 || in < 1000) { 
    out << "specify 4 digit number" << endl; 
    return; 
} 
input[0] = in%1000; 
input[1] = (in-1000*input[0])%100; 
input[2] = (in-1000*input[0]-100*input[1])%10; 
input[3] = in-1000*input[0]-100*input[1]-input[2]*10; 
+0

這個問題的一個問題是,用戶需要點擊空格鍵或在每個數字之間輸入,否則您將無法獲得4位數字。 – crashmstr

+1

在cin >> in的情況下;他不需要 – ChatCloud

1

的問題是,你正試圖在不存在(一個索引4)字符閱讀。如果你申報inputint input[4];,那麼就不必在索引中的任何字符4;只有索引0 ... 3有效。

也許您應該只使用std::stringstd::getline(),然後您可以將用戶輸入解析爲無論您喜歡的整數。或者你可以嘗試

std::cin >> input[0] >> input[1] >> input[2] >> input[3]; 

如果你可以忍受數字必須以空格分隔的限制。

0

這包括錯誤檢查的小點點:

int n = 0; 
while(n < 1000 || n >= 10000) // check read integer fits desired criteria 
{ 
    cout << "enter 4 digit number: "; 
    cin >> n; // read the input as one integer (likely 10 digit support) 
    if(!cin.good()) // check for problems reading the int 
     cin.clear(); // fix cin to make it useable again 
    while(cin.get() != '\n'); // make sure entire entered line is read 
} 
int arr[4]; // holder for desired "broken up" integer 
for(int i=0, place=1; i<4; ++i, place *= 10) 
    arr[i] = (n/place) % 10; // get n's place for each slot in array. 
cout << arr[3] << " " << arr[2] << " " << arr[1] << " " << arr[0] << endl; 
相關問題