简单聊天机器人的分段错误(核心已转储)

时间:2018-10-11 06:55:27

标签: c++

我遇到了一个简单的聊天机器人。我写了9条消息后说

Segmentation fault (core dumped)

我的代码是

#include <iostream>
#include <map>
#include <vector>
#include <string>
#include <ctime>

using namespace std;

const string user_template = "USER: ";
const string bot_template = "Bot: ";



int main(){

vector<string> Greeting{
    "Hi!",
    "Hey",
    "Hello",
    "What's up?",
    "What's good?"
};

vector<string> Responses{
    "Fine, thanks",
    "Good, thanks",
    "I'm OK",
    "Everything is good"
};
//srand((unsigned) time(NULL));

string sResponse = "";
string tResponse = "";

while(cin){
    string user_msg;
    cout << user_template;
    std::getline (std::cin, user_msg);
    int nSelection = rand() % 5;
    sResponse = Greeting[nSelection];
    tResponse = Responses[nSelection];
    if(user_msg == "quit"){
        break;
    }
    else if(user_msg == "How are you?"){
        cout << bot_template << tResponse << endl;
    }
    else{
        cout << bot_template << sResponse << endl;
    }
}
}

Picture of chatbot message

我希望该消息无限期地继续下去,我到处都是,找不到解决该问题的方法。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:5)

您超出了响应向量范围。有4个响应,这意味着它们的索引范围是0到3。rand() % 5将返回范围从0到4的值。当nSelection等于4时,您正在尝试访问位于最后一个元素之后的元素。在向量中。

作为一种可能的解决方案,您可以获得类似rand() % Responses.size()的响应索引,那么您将永远不会超出范围。响应为空的情况应分开处理,以防止被零除。