【发布时间】:2015-02-20 14:52:36
【问题描述】:
我现在正在写井字游戏,但我遇到了一个非常有趣的问题。该程序运行良好,但问题在于井字游戏矩阵。最后一个元素(最后一行,最后一列)是一个微笑,它有时会发生变化。有时是笑的微笑,也可能是一颗心。怎么了?
整个代码:
#include <iostream>
#include <string>
#include <string.h>
#include <vector>
#include <stdlib.h>
using namespace std;
char matrix[3][3];
int orow, ocolumn, xrow, xcolumn;
int drawcounter = 0;
void paint() {
for (int i = 1; i < 4; i++) {
for (int j = 1; j < 4; j++)
matrix[i][j] = '_';
}
}
void board() {
for (int i = 1; i < 4; i++)
for (int j = 1; j < 4; j++) {
if (i != 1 && j == 1)
cout << endl;
cout << matrix[i][j] << " ";
}
cout << endl;
//cout << matrix[3][3] << endl;
}
void action() {
while (0 == 0) {
puts("Time for player X. Enter index");
cin >> xcolumn >> xrow;
matrix[xcolumn][xrow] = 'X';
drawcounter += 1;
if (drawcounter == 9) {
puts("It's a draw.");
break;
}
board();
cout << endl;
if ((matrix[1][1] == 'X' && matrix[2][2] == 'X' && matrix[3][3] == 'X') || (matrix[1][3] == 'X' && matrix[2][2] == 'X' && matrix[3][1] == 'X')) {
puts("X Wins! Congrats X!");
break;
}
if ((matrix[1][1] == 'X' && matrix[1][2] == 'X' && matrix[1][3] == 'X') || (matrix[2][1] == 'X' && matrix[2][2] == 'X' && matrix[2][3] == 'X') || (matrix[3][1] == 'X' && matrix[3][2] == 'X' && matrix[3][3] == 'X')) {
puts("X Wins! Congrats X!");
break;
}
if ((matrix[1][1] == 'X' && matrix[2][1] == 'X' && matrix[3][1] == 'X') || (matrix[1][2] == 'X' && matrix[2][2] == 'X' && matrix[3][2] == 'X') || (matrix[1][3] == 'X' && matrix[2][3] == 'X' && matrix[3][3] == 'X')) {
puts("X Wins! Congrats X!");
break;
}
puts("Time for player O. Enter index");
cin >> ocolumn >> orow;
matrix[ocolumn][orow] = 'O';
drawcounter += 1;
board();
cout << endl;
if ((matrix[1][1] == 'O' && matrix[2][2] == 'O' && matrix[3][3] == 'O') || (matrix[1][3] == 'O' && matrix[2][2] == 'O' && matrix[3][1] == 'O')) {
puts("O Wins! Congrats O!");
break;
}
if ((matrix[1][1] == 'O' && matrix[1][2] == 'O' && matrix[1][3] == 'O') || (matrix[2][1] == 'O' && matrix[2][2] == 'O' && matrix[2][3] == 'O') || (matrix[3][1] == 'O' && matrix[3][2] == 'O' && matrix[3][3] == 'O')) {
puts("O Wins! Congrats O!");
break;
}
if ((matrix[1][1] == 'O' && matrix[2][1] == 'O' && matrix[3][1] == 'O') || (matrix[1][2] == 'O' && matrix[2][2] == 'O' && matrix[3][2] == 'O') || (matrix[1][3] == 'O' && matrix[2][3] == 'O' && matrix[3][3] == 'O')) {
puts("O Wins! Congrats O!");
break;
}
}
}
int main() {
paint();
board();
action();
system("pause");
return 0;
}
输出图片:
【问题讨论】:
-
控制台窗口效果是因为您输出的字节值
-
“你的输出中是那个UB,还是你很高兴见到我?”
标签: c++