2016-03-16 6 views
0

Пытается ограничить количество входов, которые пользователь может вставить в вектор при вводе массива в 1 вручную, но по какой-то причине он странный.Ограничение количества элементов в векторе

#include <iostream> 
using namespace std; 

void fillVector(vector<int>& newThisIsAVector) 
{ 
cout << "Please type in your 10 numbers separated by a space. On completion press enter."; 
int input; 
cin >> input; 

while (newThisIsAVector.size() < 10) 
{ 
    newThisIsAVector.push_back(input); 
    cin >> input; 
} 
cout << endl; 
} 

Это должно ограничить вас в 10, но вместо этого он принимает 10, то при нажатии клавиши ввода создает новую строку. Затем вы вводите 11-й номер и снова вводите его. Затем скрипт работает и регистрирует первые 10 номеров, а остальные команды отлично, но с первыми 10 числами и полностью игнорирует нежелательный 11-й номер. ;/

Как исправить это?

ответ

4

Вы используете cin один раз перед циклом и один раз внутри цикла, который повторяется 10 раз. 1 + 10 равно 11, и поэтому ввод запрашивается 11 раз. Чтобы ограничить количество входов, принятых на 10, вам необходимо ограничить вызовы cin до 10.

0

Потому что, когда вы записываете свой 10-й элемент, вектор все еще имеет 9 элементов. Итак, на следующем повороте цикла вы добавите 10-й вектор и попросите 11-го.

Если вы знаете, что это будет 10 элементов для ввода, почему бы не использовать C++ 11 std :: array?