当前代码:
const int MAX_CODENAME = 25;
const int MAX_SPOTS = 5;
struct Team {
string TeamName[MAX_CODENAME];
short int totalLeagueGames;
short int leagueWins;
short int leagueLoses;
};
//GLOBAL VARIABLES:
Team league[MAX_SPOTS];
void addTeams(){
int i = 0; //first loop
int j; //second loop
while(i < MAX_SPOTS){
cout << "****** ADD TEAMS ******" << endl;
cout << "Enter the teams name " << endl;
scanf("%s", league[i].TeamName) ;
}
void searchTeam(){
string decider[MAX_CODENAME];
cout << "Please enter the team name you would like the program to retrieve: " << endl;
cin >> decider[MAX_CODENAME];
for(int i = 0; i < MAX_SPOTS; i++){
if(decider == league[i].TeamName){
cout << endl;
cout << league[i].TeamName << endl;
break;
}else{
cout << "Searching...." << endl;
}
}
}
我真的不知道为什么它不工作,但我已经包括了所有的必备头文件,但是当我输入数据然后尝试搜索时程序崩溃了。我得到死亡圈然后程序没有响应然后说过程返回255(0xFF)。它甚至没有提出搜索....一旦我输入该名称,程序几乎放弃了。
此外,如果可以通过使用指针来优化这一点,那将是很好的。
tl; dr运行时错误,一旦我输入名称,导致搜索失败。为了记录,我已检查以确保我输入的名称有效。
scanf
不了解std::string
。使用std::cin >> league[i].TeamName
。
scanf("%s", league[i].TeamName) ;
这应该改为
std::cin >> league[i].TeamName ;
这里有几个其他的东西....
string decider[MAX_CODENAME];
cout << "Please enter the team name you would like the program to retrieve: " << endl;
cin >> decider[MAX_CODENAME];
每次输入一个值时,都告诉计算机在决策程序[25]中保存输入的值,但计算机只读取索引0-24。
if(decider == league[i].TeamName){
您将团队名称与哪个阵列位置进行比较?如果它的第25个元素应该是声明
if(decider[24] == league[i].TeamName){
如果TeamNames的数量未知,则指针更适合。根据提供的有限代码,我强烈建议您保持在基本数据类型的范围内。出于故障排除的目的,请在将来发布完整的代码。
你的TeamName
成员变量:
string TeamName[MAX_CODENAME];
是一个包含25个字符串的数组,所以在这一行中:
scanf("%s", league[i].TeamName) ;
你正在摧毁阵列。你真的不想要一个数组,所以将TeamName
声明更改为:
string TeamName;
然后当你读到这个名字时,你需要使用知道如何填充iostream
类型的string
s(scanf只适用于c char数组):
std::cin >> league[i].TeamName