Мой вектор получает дополнительный индекс, хотя я не хочу, чтобы он
Я хочу ввести пять строк и вставить их в вектор. Но это не работает для меня. Если я сделаю это, как с большим кодом ниже, я получу вектор размером 5 и смогу ввести только 4 строки. Но если я изменю это так, это говорит
for(int n=0; n<=5; n++)
Это приводит к тому, что я могу ввести 5 строк, но если я вызываю investments.size(), он возвращает значение 6. И если я распечатаю каждый элемент, он сначала запустит пустую строку, а затем выведет 5, что я ' мы вошли.
Таким образом, кажется, что когда мой цикл заканчивается, я получаю дополнительный ввод, и он помещает его в вектор. Это из-за строки getline()? Будет ли это запускаться и вводить пустую строку в мой вектор по окончании цикла?
int main(){
using namespace std;
vector<string> investments;
vector<double> andel;
double procent;
int kapital;
cout << "Hur stort kapital ska investeras?" << endl;
cin >> kapital;
cout << investments.size() << endl;
cout << "Skriv in dina fonder som du ska spara i. En i taget." << endl;
for(int n=0; n<5; n++){
string bolag;
getline(cin, bolag);
investments.push_back(bolag);
}
cout << "size of investments: " << investments.size() << endl;
for(string s : investments) cout << s << endl;
}
Проблема не в том, что cin пропускает ввод. Скорее, он добавляет вход там, где его нет.
3 ответа
Если вы напечатаете что-то между именами инвестиций, вы заметите, что первое из них пустое.
Это потому, что после того, как вы прочитали заглавную букву, после нее в потоке остается новая строка, и ваш первый getline
читает только до этой новой строки.
Вы можете исправить это, вставив
cin.ignore(100, '\n');
сразу после прочтения столицы.
(Кстати: смешивание шведских и английских идентификаторов очень быстро сбивает с толку по мере роста программы.)
for(int n=0; n<=5; n++)
Ваш первый цикл for будет выдвигать 6 строк [0;5] (включительно границы)
Но это будет хорошо работать для меня.
Hur stort kapital ska investeras?
0
Skriv in dina fonder som du ska spara i. En i taget.
size of investments: 5
это вывод, когда я компилирую ваш код выше.
Вы можете исправить эту проблему, изменив
getline(cin, bolag);
в
cin >> bolag;
Кроме того, перед первым использованием getline(cin, bolag);
ты можешь позвонить cin.ignore(1);
чтобы очистить последний перевод строки.