对不起,我之前的回答有误导性。首先,请确保你定义了恰当大小的vector来存储数据,例如`goods_array`、`berth_array`、`robot_array`和`boat_array`。其次,在代码中存在几处越界的问题:
1. 在第61行,`boat_array`应该使用下标访问元素,而不是直接使用`boat_array.status`和`boat_array.num`。应该修改为`boat_array[i - 2 - id_ - robot_num].status`和`boat_array[i - 2 - id_ - robot_num].num`。
2. 在第37行,`if (boat_array.size() < i - 2 - id_ - robot_num)`条件判断错误。应该使用`if (boat_array.size() < i - 2 - id_ - robot_num - 1)`,因为`boat_array`是从0开始计数的。
请参考以下修改后的代码:
bool Input_every_frame(int frame, int &money, int id_, vector<int> &goods_array, vector<int> &berth_array, vector<Robot> &robot_array, vector<Boat> &boat_array){
char line;
int i = 0;
Goods goods_array_temp;
Robot robot_array_temp;
Boat boat_array_temp;
while (fgets(line, sizeof line, stdin)){
if (line == 'O' && line == 'K'){
return true;
}
if (i == 0){
i++;
scanf("%d", &money);
continue;
}
if (i == 1){
i++;
scanf("%d", &id_);
continue;
}
if (i > 1 && i <= 1 + id_){
scanf("%d", &goods_array_temp);
goods_array.push_back(goods_array_temp);
i++;
if (i == 2 + id_){
goods_array.resize(id_);
}
continue;
}
if (i > 1 + id_ && i <= 1 + id_ + robot_num){
scanf("%d %d", &robot_array_temp.status, &robot_array_temp.num);
robot_array.push_back(robot_array_temp);
i++;
if (i == 2 + id_ + robot_num){
robot_array.resize(robot_num);
}
continue;
}
if (i > 1 + id_ + robot_num && i <= 6 + id_ + robot_num){
if (frame == 1){
scanf("%d %d", &boat_array_temp.status, &boat_array_temp.num);
boat_array.push_back(boat_array_temp);
i++;
}
else{
if (boat_array.size() < i - 2 - id_ - robot_num - 1)
boat_array.resize(i - 2 - id_ - robot_num - 1);
scanf("%d %d", &boat_array[i - 2 - id_ - robot_num - 1].status, &boat_array[i - 2 - id_ - robot_num - 1].num);
i++;
}
if (i > 6 + id_ + robot_num)
return true;
continue;
}
}
return false;
}
请注意,你还需要根据实际需求修改其他部分的代码逻辑,并确保传递给该函数的vector变量已经正确初始化和分配内存。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |