2017-09-09 111 views
1

如果有人能夠查看我的代碼,我似乎無法找到它的問題,但我確信我只是不瞭解有關push_back/pop_back功能的內容。C++ push_back,pop_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){break; }' – 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++; 
}