运行代码时,c++ 会终止进程

When running code, c++ terminates the process

本文关键字:终止 进程 c++ 代码 运行      更新时间:2023-10-16

我正在尝试为游戏tictactoe编写代码,我快完成了,我还没有写完结束游戏的代码部分。我唯一的问题是 c++ 停止运行,"进程以状态 0 终止"。除此之外,代码运行良好。事实上,它在终止之前一直完美运行,有人可以帮助我吗? 缩进弄乱了板功能的图形部分,所以不要介意。函数板((创建一个标记为1-9的3×3网格,函数game((根据plpayer选择的数字将每个数字替换为O或X,所有这些都由开关和while统计完成。 这是我的代码,谢谢。

using namespace std;
string a = "1";
string b = "2";
string c = "3";
string d = "4";
string e = "5";
string f = "6";
string g = "7";
string h = "8";
string i = "9";
string s1;
string s2;
string o = "O";
string x = "X";
string k = "Tic-Tac-Toen";
void ClearScreen() {
cout << string(100, 'n');
}
void board() {
std::cout << "             " << k;
std::cout << "           |           |           n";
std::cout << "     " << a << "     |     " << b << "     |     " << c << "     
n ";
std::cout << "___________|___________|___________n";
std::cout << "           |           |           n";
std::cout << "     " << d << "     |     " << e << "     |    " << f << "     
n ";
std::cout << "___________|___________|___________n";
std::cout << "           |           |           n";
std::cout << "     " << g << "     |     " << h << "     |     " << i << "     
n ";
std::cout << "           |           |           n";
std::cout << "      Player 1:O, Player 2:Xn";
}
void game() {
board();
int z = 1;
while (z <= 9 && z % 2 == 1) {
std::cin >> s1;
int n1 = stoi(s1);
switch (n1) {
case 1:
a = o;
z++;
break;
case 2:
b = o;
z++;
break;
case 3:
c = o;
z++;
break;
case 4:
d = o;
z++;
break;
case 5:
e = o;
z++;
break;
case 6:
f = o;
z++;
break;
case 7:
g = o;
z++;
break;
case 8:
h = o;
z++;
break;
case 9:
i = o;
z++;
break;
}
board();
}
while (z <= 9 && z % 2 == 0) {
std::cin >> s2;
int n2 = stoi(s2);
switch (n2) {
case 1:
a = x;
z++;
break;
case 2:
b = x;
z++;
break;
case 3:
c = x;
z++;
break;
case 4:
d = x;
z++;
break;
case 5:
e = x;
z++;
break;
case 6:
f = x;
z++;
break;
case 7:
g = x;
z++;
break;
case 8:
h = x;
z++;
break;
case 9:
i = x;
z++;
break;
}
board();
}
}
int main() {
game();
}

问题是你正在为玩家 O 执行一轮。玩家X的一轮。然后退出game函数。你永远不会告诉你的代码循环回到玩家 O 的轮次。

在您的代码中:

void game() {
board();
int z = 1;
while (z <= 9 && z % 2 == 1) {
std::cin >> s1;
int n1 = stoi(s1);
switch (n1) {
case 1:
a = o;
z++;
break;
...
}
board();
}
while (z <= 9 && z % 2 == 0) {
std::cin >> s2;
int n2 = stoi(s2);
switch (n2) {
case 1:
a = x;
z++;
break;
...
}
board();
}
}

你在z==1时输入第一个 while 循环(播放器 O(,循环条件的两个部分都为真。然后你做一个动作,z递增 1,循环条件的第二部分 (z % 2 == 1( 不再为真。这个循环结束了。你进入下一个循环(玩家X(并做类似的事情,然后完全退出。

看起来您正在使用z来跟踪哪个转弯?在这种情况下,我建议有一个OUT循环来跟踪回合,两个内部开关来处理每个玩家的回合。你可以清理它,它看起来像这样:

void game() {
board();
// executes 9 rounds of the game
// each player gets one turn per round
for (int z = 0; z < 9; ++z)
{
// player O
std::cin >> s;
int n = stoi(s);
switch (n)
{
case 1: a = o; break;
case 2: b = o; break;
case 3: c = o; break;
...
}
board();
// player X
std::cin >> s;
int n = stoi(s);
switch (n)
{
case 1: a = x; break;
case 2: b = x; break;
case 3: c = x; break;
...
}
board();
}
}

我还会进行其他更改,以将代码封装到函数中并重用代码并提高可读性,但我不想完全重写您的代码并使其无法识别。婴儿步骤。此外,我所做的任何更改都只是我的意见。你知道他们对意见的看法。