由于某种原因,多维数组不会从函数中更改元素
Multidimensional array not changing elements from function for some reason
函数 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++语法,语法生成布尔值,但是它不会修改参数(比较的左侧和右侧),这可能是您在大多数情况下想要做的。启用编译器标志(如-Wall
或Wextra
)以及Werror
有助于避免此类错误。
相关文章:
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用不带参数的函数访问结构元素
- 使用函数"remove"删除重复元素
- 如何将元素添加到数组的线程安全函数?
- 如何通过 getter 函数删除矢量的元素?
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- 复制包含C++所有元素的对象!(构造函数和赋值,最佳实践?
- 如何在基类指针向量的元素上应用重载的多态函数
- 这个返回元素位置的基于循环的函数有什么问题?
- 如何在 STL 函数中找到传递给谓词的元素的索引?
- 为什么用户定义的函数不按照给定的顺序对相同长度的元素进行排序?
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- 交换函数不是在 C++ 中交换 2D 数组的元素
- C++:带有大括号初始化列表的函数调用表达式 - 标准是否规定在单个元素列表的微不足道的情况下忽略大括号?
- 如何在 c++ 中将整个数组初始化为类构造函数中的单个元素
- 动态分配列表 - 创建一个函数,用于删除所有包含偶数值的元素
- 使用并行参数向量调用元素向量的成员函数
- 静态堆栈函数不会 1) 输入第一个元素 2)添加新元素时识别旧元素
- 如何使用某些因素的函数元素定义数组 m 由 n
- 运行时来自元组的源模板函数元素