【发布时间】:2021-07-28 15:59:48
【问题描述】:
我正在用 C 语言编写井字游戏。我的代码如下所示。
#include <stdio.h>
#include <conio.h>
char evaluateWinConditions(char board[3][3]);
int main(void)
{
puts("---");
puts("---");
puts("---");
char board[3][3] = {{"-"}}; // board
char key = 0; // stores key presses
// stores position of mouse pointer
int row = 1;
int column = 1;
// stores player turn
int player = 1;
printf("\033[%d;%dH", row, column);
while (evaluateWinConditions(board) == 0) {
key = _getch();
switch (key) {
case 'a':
column -= 1;
break;
case 'w':
row -= 1;
break;
case 'd':
column += 1;
break;
case 's':
row += 1;
break;
case ' ':
if (player == 1) {
printf("%c", 'X');
board[row][column] = 'X';
player = 2;
}
else {
printf("%c", 'O');
board[row][column] == 'O';
player = 1;
}
break;
}
printf("\033[%d;%dH", row, column);
}
printf("\033[5;1H");
if (evaluateWinConditions(board == 1)) printf("Player 1 wins.");
else printf("Player 2 wins.");
}
char evaluateWinConditions(char board[3][3])
{
if (board[0][0] == board[0][1] == board[0][2] ||
board[1][0] == board[1][1] == board[1][2] ||
board[2][0] == board[2][1] == board[2][2] ||
board[0][0] == board[1][1] == board[2][2] ||
board[0][2] == board[1][1] == board[2][0]) {
if (board[0][0] == "X") return 1;
else return 2;
}
else {
return 0;
}
}
当我编译程序时,没有错误。但是,当我运行该程序时,我收到代码为 -1073741819 的运行时错误。我使用的是 Windows 10 64 位和 Visual Studio 2019。运行程序大约一秒钟后出现此错误。当我在 Visual Studio 中调试程序时,我在第 74 行收到错误“抛出异常:读取访问冲突;板为 nullptr”
【问题讨论】:
-
char board[3][3] = {"-"};- 这只会初始化数组的单个元素。其余的将为零。字符也写在单引号中。这也适用于您的比较,例如board[row][column] = "X"; -
启用编译器警告并修复警告。单个字符是例如
'X'不是"X"。后者是字符串文字。这在分配或比较board的单个元素时很重要。错误的括号:while (evaluateWinConditions(board == 0)),你的意思是while (evaluateWinConditions(board )== 0)?附加提示:代替case 97: // a使用case 'a': -
好的,我做了你列出的更改。我也相应地更改了列出的代码
-
发生了什么?不,你不应该改变这个问题,因为它应该仍然是一个问题。
-
-1073741819 与 NT 状态码
STATUS_ACCESS_VIOLATION匹配,但原始无符号 32 位值 0xC0000005 已被解释为有符号 32 位值。
标签: c