gpt4 book ai didi

C:比较两个元素没有产生正确的结果?

转载 作者:行者123 更新时间:2023-11-30 17:07:33 25 4
gpt4 key购买 nike

我的代码如下,其中大部分可能没有帮助,但也许问题出在我认为的范围之外。话虽这么说,请先阅读以下内容,因为它给出了我的代码的概要并说明了我认为问题所在。

我正在尝试用 C 创建一个战舰游戏。我首先创建两个二维数组,一个代表玩家的棋盘,一个代表敌人的棋盘。我都用句号填满了它们。我将它们打印出来,并在两侧加上数字,以使内容看起来不错(使用我的initialPrintBoards 函数)。然后,我通过用“s”替换敌人数组中的一些句点来设置敌人船只的位置,并将其打印出来以确保它们位于我想要的位置。他们是,这很棒。然后我让玩家向敌人的船“开火”。这是通过将敌人数组中的“s”替换为“x”(代表命中)或替换“.”来完成的。与“o”(代表未命中)。我将其打印出来,一切正常。

现在,我遇到了一个问题。到目前为止,为了进行测试,敌人的船只已经通过我的打印方法对玩家完全可见。我不想那样。所以,我想我要做的是创建一个新的打印函数(称为 printBoards),它的功能与我之前的打印函数的功能完全相同,只是它打印“.”。当它遇到敌人数组中的元素“s”时,就会出现在棋盘上。我最初的想法是通过比较来实现这一目标。基本上,如果存储在敌人数组中位置为“s”的元素,则打印“.”,否则打印出存储在数组中该位置的内容(将是“.”、“x”或“o”) )。不幸的是,它所做的只是打印所有句点,即使数组中的该位置存储有“x”或“o”。我不知道这是为什么。我对 C 很陌生(我过去学过 Java),所以也许 C 中的比较有一些我不知道的东西。但这是假设问题出在比较上,但事实可能并非如此。

任何帮助或提示将不胜感激。

#include <stdio.h>

char playerBoard[8][8];
char enemyBoard[8][8];

void fillBoards()
{
int a;
for (a = 0; a < 8; a++)
{
int b;
for (b = 0; b < 8; b++)
{
enemyBoard[a][b] = '.';
}
}
int x;
for (x = 0; x < 8; x++)
{
int y;
for (y = 0; y < 8; y++)
{
playerBoard[x][y] = '.';
}
}
}

void initialPrintBoards()//This is used before the enemy's ships are set.
{
printf("Enemy Board\n*12345678\n");
int a;
for (a = 0; a < 8; a++)
{
printf("%d", a + 1);
int b;
for (b = 0; b < 8; b++)
{
printf("%c", enemyBoard[a][b]);
}
printf("\n");
}

printf("\n");

printf("Player Board\n*12345678\n");
int x;
for (x = 0; x < 8; x++)
{
printf("%d", x + 1);
int y;
for (y = 0; y < 8; y++)
{
printf("%c", playerBoard[x][y]);
}
printf("\n");
}
printf("\n");
}

void printGreeting()
{
printf("\nWelcome to Battleship!\n\n");
}

void setEnemyShips()
{
// Ship 1.
enemyBoard[3][2] = 's';
enemyBoard[4][2] = 's';
enemyBoard[5][2] = 's';
// Ship 2.
enemyBoard[1][1] = 's';
enemyBoard[1][2] = 's';
enemyBoard[1][3] = 's';
// Ship 3.
enemyBoard[6][5] = 's';
enemyBoard[6][6] = 's';
enemyBoard[6][7] = 's';
}

void playerFire()
{
if (enemyBoard[2][2] == 's')
{
enemyBoard[2][2] = 'x';
}
else
{
enemyBoard[2][2] = 'o';
}
}

void printBoards()//This is used after the enemy's ships are set.
{
printf("Enemy Board\n*12345678\n");
int a;
for (a = 0; a < 8; a++)
{
printf("%d", a + 1);
int b;
for (b = 0; b < 8; b++)
{
if (enemyBoard[1][0] == 's')
{
printf("%c", '.');
}
else
{
printf("%c", enemyBoard[1][0]);
}
}
printf("\n");
}

printf("\n");

printf("Player Board\n*12345678\n");
int x;
for (x = 0; x < 8; x++)
{
printf("%d", x + 1);
int y;
for (y = 0; y < 8; y++)
{
printf("%c", playerBoard[x][y]);
}
printf("\n");
}
printf("\n");
}


int main()
{
fillBoards();
printGreeting();
initialPrintBoards(); //This will print the boards before the enemy's ships are set.
setEnemyShips();
initialPrintBoards(); //This will end up printing the enemy ships' locations. Need a different print method.
playerFire();
initialPrintBoards(); //This prints to see if a hit or miss is properly printed.
printBoards(); //This prints to see if the ships are hidden and a hit or miss is properly printed.
return 0;
}

最佳答案

关于这段代码,可以在printBoards()函数中找到:

        if (enemyBoard[1][0] == 's')
{
printf("%c", '.');
}
else
{
printf("%c", enemyBoard[1][0]);
}

它总是查看第二行第一列来确定打印的内容。正如您所看到的,这是一个错误。

建议:

        if (enemyBoard[a][b] == 's')
{
printf("%c", '.');
}
else
{
printf("%c", enemyBoard[a][b]);
}

关于C:比较两个元素没有产生正确的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34032143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com