2013-10-25 184 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; 
相关问题