由于某种原因,多维数组不会从函数中更改元素

Multidimensional array not changing elements from function for some reason

本文关键字:函数 元素 数组 由于某种原因      更新时间:2023-10-16

函数 player_attack() 更改了多维数组的元素pc_board但是当我在 main 中重新打印它时,数组打印不变。 我删除了所有不必要的代码。

我尝试将 is at 作为参数传递给函数,但在参数中使用多维数组时出现错误。

$

bool game_won = false;
string board[5][5];
string pc_board[5][5];
void initialize_player_board() {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
board[i][j] = "-";
}
}
}
void print_map() {
for (int i = 0; i < 5; i++) {
cout << setw(5);
cout << i << setw(5);
for (int j = 0; j < 5; j++) {
cout << board[i][j] << setw(5);
}
cout << setw(10);
for (int j = 0; j < 5; j++) {
cout << pc_board[i][j] << setw(5);
}
cout << endl;
}
}

void pc_add_battleship() {
int x = 0;
int y = 0;
int choice_generator = 0;
char choice;
x = rand() % 4 + 1;
y = rand() % 4 + 1;
choice_generator = rand() % 2;
if (choice_generator == 0) {
choice = 'h';
}
else {
choice = 'v';
}
if (choice == 'h') {
pc_board[y - 1][x] = 'O';
pc_board[y][x] = 'O';
pc_board[y + 1][x] = 'O';
}
if (choice == 'v') {
pc_board[y][x - 1] = 'O';
pc_board[y][x] = 'O';
pc_board[y][x + 1] = 'O';
}
}
void player_attack() {
int x = 0; 
int y = 0;
cout << "Choose an x coordinate to attack: " << endl;
cin >> x;
cout << "Choose a y coordinate to attack: " << endl;
cin >> y;
if (pc_board[y][x] == "O") {
cout << "HIT!" << endl;
pc_board[y][x] == "H";
}
else {
cout << "Miss." << endl;
pc_board[y][x] == "M";
}
}

int main()
{
srand(time(0));
initialize_player_board();
initialize_pc_board();
cout << "Welcome to the battleship game." << endl;
print_map();
Add_battleship();
pc_add_battleship();
while (!game_won) {
print_map();
player_attack();
}

return 0;
}

$

我希望多维数组由于函数而改变其元素

在你的函数player_attack中使用了错误的运算符:

if (pc_board[y][x] == "O") {
cout << "HIT!" << endl;
pc_board[y][x] == "H";  // here
}
else {
cout << "Miss." << endl;
pc_board[y][x] == "M";  // and here
}

应使用=赋值运算符,而不是比较运算符==比较运算符。

在此上下文中使用operator ==仍然有效C++语法,语法生成布尔值,但是它不会修改参数(比较的左侧和右侧),这可能是您在大多数情况下想要做的。启用编译器标志(如-WallWextra)以及Werror有助于避免此类错误。