运行代码时,c++ 会终止进程
When running code, c++ terminates the process
我正在尝试为游戏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();
}
}
我还会进行其他更改,以将代码封装到函数中并重用代码并提高可读性,但我不想完全重写您的代码并使其无法识别。婴儿步骤。此外,我所做的任何更改都只是我的意见。你知道他们对意见的看法。
相关文章:
- 运行代码时,c++ 会终止进程
- CLion 如何终止进程运行?
- 使用进程 ID 终止进程
- 有没有办法通过过滤进程的名称来自动终止进程?
- Windows资源监视器使用哪些Win32函数来检测已终止进程的磁盘和网络活动
- 终止进程并关闭其所有打开的侦听端口
- 如何释放被终止进程锁定的端口
- 使用进程名称终止进程
- 如何检测终止进程事件、计算机关闭和计算机崩溃
- 我无法使用终止进程杀死子进程
- 使用终止进程终止"mstsc.exe"进程时出现错误代码(5)访问被拒绝
- 在跨平台C++启动和终止进程
- 使用SIGSEGV或SIGABRT信号转储核心并终止进程
- 如何使用管理权限调用终止进程
- QT中的运行和终止进程C++通过按下按钮
- 使用SIGHUP重新启动终止进程
- dbus-c++中的断言错误,终止进程
- 如果在堆上定义,QProcess 不会终止/终止进程
- WinAPI - windows关闭前的清理终止进程
- 从VS10应用程序中查找/终止进程(VC6应用程序)