多维数组由于某种原因未更改功能中的元素

时间:2019-04-17 09:14:10

标签: c++

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

我试图将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;
}

$

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

1 个答案:

答案 0 :(得分:1)

在函数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有助于避免此类错误。