Мой вектор получает дополнительный индекс, хотя я не хочу, чтобы он

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

Другие вопросы по тегам