2017-09-09 18 views
1

誰かが私のコードを見れば、問題は見つからないかもしれませんが、私はpush_back/pop_back関数について何か理解していないと確信しています。C++ push_back、pop_back。エラーを取得する:ベクトル添え字が範囲外にある

このプログラムは、ユーザー入力を受け取り、ユーザーが「停止」を入力すると停止するベクトルを作成するように設計されています。

これは私にこのエラーを与えている間違いなく、私は間違っているか何かを変更しているかわかりません。何か助けに感謝します。

コード:

#include <vector> 
#include <string> 
using namespace std; 


int main(){ 

    vector<string> animals; 

    vector<string> ages; 
    int const SIZE = 5; 
    string stopCheck = "stop"; 
    string tempUserInput; 
    int i = 0; 

    //Loop used to gather user input and store it into array, animals and array, ages 
    cout << "Please enter up to 5 animal names and ages, or type 'stop' to end" << endl; 

    while(i<5) { 
     cout << i << endl; 
     // Taking user input for NAMES 

     cout << "Enter the name of an animal: "; 
     cin >> tempUserInput; 
     animals.push_back(tempUserInput); 
     cout << endl; 

     cout << animals.size() << endl; 

     //Function that automates the tolower function by applying it to each element automatically 
     //transform(animals[i].begin(), animals[i].end(), animals[i].begin(), tolower); 

     cout << animals.size() << endl; 

     //Checking for a stop input 
     if (!animals[i].compare(stopCheck)){ 
      animals.pop_back(); 
      i = 5; 
     } 
     i++; 

     return 0; 
    } 

は、それが正しく、100%のコピーが、私の初期化を想定していないが、右であり、問​​題は、私は任意の助けをいただければと思いますwhileループです。

+1

が、*の前にこれを行うことが容易ではないでしょう* 'push_back'? 'if(tempUserInput == stopCheck){ブレーク; } ' – rustyx

+0

デバッガは、エラーが発生した行を示す必要があります。 "ベクトル添字が範囲外です"とは、 'some_vector [index]'のように、 'index'が> some_vector.size()であることを意味します。つまり、存在しない要素にアクセスしたことを意味します。 – nwp

+0

あなたの問題は何ですか? – Raindrop7

答えて

-2
if (tempUserInput==stopCheck) { break; } 

停止時にこの行を使用して確認してください。

全コード:

while(i<5) { 
    cout << i << endl; 
    // Taking user input for NAMES 

    cout << "Enter the name of an animal: "; 
    cin >> tempUserInput; 
    if (tempUserInput==stopCheck) { break; } //thats it ! 
    animals.push_back(tempUserInput); 
    cout << endl; 

    cout << animals.size() << endl; 

    //Function that automates the tolower function by applying it to each element automatically 
    //transform(animals[i].begin(), animals[i].end(), animals[i].begin(), tolower); 

    cout << animals.size() << endl; 
    i++; 
} 
関連する問題