У меня есть то, что кажется довольно простым, начинающим вопросом, что я должен упустить что-то очевидное. Я просто пытаюсь предложить пользователю ввести 4-значное число, а затем взять вход в качестве массива, разделив цифры, чтобы быть собой. Я думал, что это что-то связано с "cin >> input [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];
}
Когда я иду запустить его, я получаю сообщение об ошибке "Stack around the variable был поврежден. Я попытался найти похожие примеры в других вопросах, но я просто не могу понять, что это правильно. Мне нужен ввод как один 4-значный номер а затем разделил его на 4-х позиционный массив. Если бы кто-нибудь мог помочь, я бы очень признателен.
Ваш массив имеет размер 4, поэтому элементы имеют индикаторы 0.. 3; вход [4] расположен за концом вашего массива, поэтому вы пытаетесь изменить память, не выделенную или выделенную для других вещей.
Это будет работать для вас:
cin >> input[0];
cin >> input[1];
cin >> input[2];
cin >> input[3];
Вам не нужно вводить 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;
Проблема в том, что вы пытаетесь прочитать символ, который не существует (тот, который указан в индексе 4). Если вы объявляете input
как int input[4];
, то у него нет символов в индексе 4; справедливы только индексы 0... 3.
Возможно, вам следует просто использовать std::string
и std::getline()
, и тогда вы сможете проанализировать ввод пользователя в целые числа, как вам нравится. Или вы можете попробовать
std::cin >> input[0] >> input[1] >> input[2] >> input[3];
если вы можете жить с ограничением, что числа должны быть разделены пробелами.
Это включает в себя небольшую проверку ошибок:
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 place for each slot in array.
cout << arr[3] << " " << arr[2] << " " << arr[1] << " " << arr[0] << endl;
cin >> input;
Вы хотите весь массив, а не только один символ. Также мог бы сделатьint n; cin >> n;
, Имейте в виду, что есть тонна, чтобы узнать об управлении ошибкамиcin
.cin >> input
не будет работать для массиваint
s.