Стек вокруг переменной поврежден

0

У меня есть то, что кажется довольно простым, начинающим вопросом, что я должен упустить что-то очевидное. Я просто пытаюсь предложить пользователю ввести 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-х позиционный массив. Если бы кто-нибудь мог помочь, я бы очень признателен.

  • 1
    cin >> input; Вы хотите весь массив, а не только один символ. Также мог бы сделать int n; cin >> n; , Имейте в виду, что есть тонна, чтобы узнать об управлении ошибками cin .
  • 0
    @ebyrob cin >> input не будет работать для массива int s.
Показать ещё 4 комментария
Теги:
arrays
cin

3 ответа

2

Ваш массив имеет размер 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;
  • 0
    Одна из проблем заключается в том, что пользователю нужно будет нажимать пробел или вводить между каждой цифрой, в противном случае вы не получите 4 однозначных чисел.
  • 1
    в случае с cin >> in; ему не нужно
1

Проблема в том, что вы пытаетесь прочитать символ, который не существует (тот, который указан в индексе 4). Если вы объявляете input как int input[4]; , то у него нет символов в индексе 4; справедливы только индексы 0... 3.

Возможно, вам следует просто использовать std::string и std::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 place for each slot in array.
cout << arr[3] << " " << arr[2] << " " << arr[1] << " " << arr[0] << endl;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню