c++ - 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;
}
解决方案
这是在输入的名称之间切换的工作代码:
#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;
}
推荐阅读
- python - Opencv VideoCapture 在 Heroku 上总是返回 false
- python - 我怎样才能得到所有 booleanField 等于 false 的行?
- java - ImageMagick在Spring boot的打包WAR中找不到convert.exe的路径
- javascript - 为什么对象方法是重写原始对象?
- mysql - 如何正确组织同一张表中的历史数据?
- python - 在 Python 3.6 中添加到 9.9 时出错
- python - Pyinstaller with Django: ModuleNotFoundError: No Module Named django.contrib.messages.apps
- versioning - 在 VSTS 构建过程中使用 `dotnet pack` 将内部版本号添加到包版本
- ansible-2.x - ansible 2.4.2 中的 ansible 切换用户
- ios - Xamarin.ios:在 .Split(",") 之后列出跳过的代码的字符串