首页 > 解决方案 > c ++将用户输入的值分配给另一个变量并交换它得到的所有值循环

问题描述

我想我可以从你们那里得到一点帮助,所以我正在尝试交换我从用户输入中获得的玩家的名字。我尝试将玩家姓名之一的值分配给变量 current_name_turn。因此,每次循环通过时,current_name_turn 都会将值更改为其他玩家的名称,无论是使用 if 条件还是交换,我都可以同时使用。但这里似乎我的 current_name_turn 的值没有被淘汰。或者我可能无法将值传递给它。所以,我需要更正或建议:)

#include <iostream>

using namespace std;

bool game_is_playing = true;
string name[] = {"x","o"};
string player_1, player_2;
string current_name_turn = player_1;

string ask_player_name_1(string player_1){
    cout << " Player 1's name: ";
    cin >> name[0];
    player_1 = name[0];
    return player_1;
}

string ask_player_name_2(string player_2){
    cout << " Player 2's name: ";
    cin >> name[1];
    player_2 = name[1];
    return player_2;
}

void display_board(){
    cout << player_1 + " (X) - (O) " + player_2 << endl;
}

void player_turn(){
    int position;
    cin.clear();
    cout << current_name_turn << "'s turn." << endl;
    cout << "Enter something: " << endl;
    cin << position;
}

void switch_player_turn(){
    if (current_name_turn == player_1){
        current_name_turn = player_2;
    } else if (current_name_turn == player_2){
        current_name_turn = player_1;
    }
}

void play_the_game(){
    display_board();
    while(game_is_playing){
        player_turn();
        switch_player_turn();
    }
}

int main()
{
    player_1 = ask_player_name_1(player_1);
    player_2 = ask_player_name_2(player_2);
    play_the_game();
    return 0;
}

标签: c++

解决方案


这是在输入的名称之间切换的工作代码:

#include <iostream>

using namespace std;

bool game_is_playing = true;
string name[] = {"x","o"};
string player_1, player_2;
string current_name_turn = player_1;

string ask_player_name_1(string player_1){
    cout << " Player 1's name: ";
    cin >> name[0];
    player_1 = name[0];
    current_name_turn = player_1;//added this line to set the current_name_turn
    return player_1;
}

string ask_player_name_2(string player_2){
    cout << " Player 2's name: ";
    cin >> name[1];
    player_2 = name[1];
    return player_2;
}

void display_board(){
    cout << player_1 + " (X) - (O) " + player_2 << endl;
}

void player_turn(){
    int position;
    cin.clear();
    cout << current_name_turn << "'s turn." << endl;
    cout << "Enter something: " << endl;
    cin >> position;
}

void switch_player_turn(){
    if (current_name_turn == player_1){
        current_name_turn = player_2;
    } else if (current_name_turn == player_2){
        current_name_turn = player_1;
    }
}

void play_the_game(){
    display_board();
    while(game_is_playing){
        player_turn();
        switch_player_turn();
    }
}

int main()
{
    player_1 = ask_player_name_1(player_1);
    player_2 = ask_player_name_2(player_2);
    play_the_game();
    return 0;
}

下面我删除了一些不必要的重复代码,以便您现在拥有一个更紧凑的版本。在这个紧凑的版本中,您只需要传递球员的索引。

精简版

#include <iostream>

using namespace std;

bool game_is_playing = true;
string name[] = {"x","o"};
string player_1, player_2;
string current_name_turn = player_1;

//now we have one ask_player_name function instead of two which reduces the size of the program
string ask_player_name(int playerNumber){
    cout << " Player " <<playerNumber<<"'s name: ";
    cin >> name[playerNumber];
    current_name_turn = name[playerNumber];
    return name[playerNumber];
}
void display_board(){
    cout << player_1 + " (X) - (O) " + player_2 << endl;
}

void player_turn(){
    int position;
    cin.clear();
    cout << current_name_turn << "'s turn." << endl;
    cout << "Enter something: " << endl;
    cin >> position;
}

void switch_player_turn(){
    if (current_name_turn == player_1){
        current_name_turn = player_2;
    } else if (current_name_turn == player_2){
        current_name_turn = player_1;
    }
}

void play_the_game(){
    display_board();
    while(game_is_playing){
        player_turn();
        switch_player_turn();
    }
}

int main()
{
    player_1 = ask_player_name(0);
    player_2 = ask_player_name(1);
    play_the_game();
    return 0;
}


推荐阅读