저는 아주 간단한 프로그램을 만들고 있습니다. 약간의 로봇 봇 AI 종류에 대해 이야기하고 있으며, 프로그램을 위해서 C++ 코드를 가지고 있습니다. 어떤 오류도 발생하지 않지만 실행하면 응답하지 않는 것처럼 program.exe가 작동을 중지했다는 창이 나타납니다. 내 코드 :C++ 프로그램이 작동을 멈췄습니다.
#include<iostream>
#include<string.h>
#include<cmath>
#include<vector>
#include<ctime>
#include<conio.h>
#include<algorithm>
#include<cstdlib>
using namespace std;
struct strarray{
char* array[];
};
struct keyword{
string keywords;
string responses[];
};
keyword * dictionary = new keyword[2];
keyword defaultr;
keyword getMatch(string key);
string sconvert(string con);
void init();
string getResp(keyword key);
bool cont=true;
int main(int argc, char* argv[]){
string input;
while(cont){
getline(cin,input);
cout << getResp(getMatch(input));
getch();
getch();
}
}
string sconvert(string con){
con.erase(remove_if(con.begin(), con.end(), ::isspace), con.end());
con.erase(remove_if(con.begin(), con.end(), ::ispunct), con.end());
return con;
}
void init(){
srand(time(NULL));
dictionary[0].keywords="hello";
dictionary[0].responses[0]="Hello, how have you been?";
dictionary[0].responses[1]="Hello, have you missed me?";
dictionary[0].responses[2]="Hey, how's it going?";
defaultr.responses[0]="That's interesting, tell me more.";
defaultr.responses[1]="Please, tell me more.";
}
keyword getMatch(string key){
for(int i=0; i<sizeof(dictionary); i++){
if(key==dictionary[i].keywords){return dictionary[i];}
}
return defaultr;
}
string getResp(keyword key){
return key.responses[rand() % sizeof(key)];
}
실행하면 정상적으로 열리지 만 입력 할 때 입력하면 "작동을 멈 춥니 다." 누군가 내가 왜 변해야하는지 말해 주시겠습니까?
몇 가지 포인터 문제가 있습니까? rand
을 사용하거나 나는 정말로 혼란스럽고이 프로그램을 더 잘 활용할 수있는 방법에 대한 조언을 주시면 감사하겠습니다.
:
당신은 또한
struct keyword
을 변경해야합니다. – ryanbwork디버거를 실행하지 않는 것 같습니다. 예외가 발생하면 디버거를 실행해야하며 충돌이 발생한 이유를 정확히 알 수 있습니다. – evanmcdonnal
STL의 고급 무언가와 STL의 완전한 무지가 얼마나 매력적인가? 나는 intruiged. 'std :: map'과'std :: vector'를 사용하는 방법을 찾으십시오. 그러면이 코드가 훨씬 쉽고 오류가 발생하기 쉽습니다. –