在C ++中遍历一个结构数组错误

问题描述 投票:0回答:3

当前代码:

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运行时错误,一旦我输入名称,导致搜索失败。为了记录,我已检查以确保我输入的名称有效。

c++ arrays string struct runtime-error
3个回答
0
投票

scanf不了解std::string。使用std::cin >> league[i].TeamName


0
投票
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的数量未知,则指针更适合。根据提供的有限代码,我强烈建议您保持在基本数据类型的范围内。出于故障排除的目的,请在将来发布完整的代码。


0
投票

你的TeamName成员变量:

string TeamName[MAX_CODENAME];  

是一个包含25个字符串的数组,所以在这一行中:

scanf("%s", league[i].TeamName) ;

你正在摧毁阵列。你真的不想要一个数组,所以将TeamName声明更改为:

string TeamName;  

然后当你读到这个名字时,你需要使用知道如何填充iostream类型的strings(scanf只适用于c char数组):

std::cin >> league[i].TeamName
© www.soinside.com 2019 - 2024. All rights reserved.