[英]Creating a game board using struct
因此,我正在為戰艦制作游戲板,但我正在嘗試使用一種結構來制作。 目前,在嘗試創建游戲板時出現錯誤。 我正在嘗試以這種方式進行操作,以便當用戶輸入船的坐標或他們進行移動時,我可以輕松地更改符號並獲得數組上的正確坐標。 這就是我現在正在使用的內容。 我使用的是3文件格式,因此我將所有內容都放在下面。
我可以在不使用結構的情況下創建板,但是我很確定我需要以這種方式創建板,以便以后可以操作板。
如果這有幫助,這是我當前的錯誤:運行時檢查失敗#3-使用變量'person'時未進行初始化。
這在頭文件中
typedef struct game_board
{
int board[10][10];
int row;
int col;
char symbol;
}Game_Board;
Game_Board initalize_game_board(Game_Board player);
功能
Game_Board initalize_game_board(Game_Board player)
{
int row_index = 0, col_index = 0;
printf(" 0 1 2 3 4 5 6 7 8 9\n");
for (row_index = 0; row_index < player.row; row_index++)
{
printf("%d ", row_index);
for (col_index = 0; col_index < player.col; col_index++)
{
player.board[row_index][col_index] = player.symbol;
printf("%c ", player.board[row_index][col_index]);
}
printf("\n");
}
}
在主要功能上
int main(void)
{
FILE *outfile = NULL;
outfile = fopen("battleship.log", "w");
Game_Board person, computer;
int who_goes_first = 0;
strcpy(person.symbol, '~');
person.row = 10;
person.col = 10;
strcpy(computer.symbol, '~');
computer.row = 10;
computer.col = 10;
welcome_screen(outfile);
printf("Player 1\n");
initalize_game_board(person);
這兩個函數都需要return語句。 main()的結尾括號。
強烈推薦
computer.symbol = '~';
代替
strcpy(computer.symbol, '~');
基於Ryan的答案,strcpy()假定源字符串具有空終止符,以知道要復制多少個字符。 在您的情況下,源字符串中沒有空終止符。 從內存中讀取空字符之前,strcpy()不會停止復制。 由於您使用的是單個字符,因此只需執行簡單的賦值語句即可!
另外,在函數initalize_game_board()中,考慮將指針傳遞給Game_Board結構,而不是傳遞結構本身。 執行此操作時,可以通過使用函數本身內的箭頭(->)運算符來更改實際結構的內容(在這種情況下為結構'person')。 然后,您將不必從該函數返回結構。 使用當前的設計,您正在創建該結構的臨時副本,然后填充它,然后(可能在修改后!)返回該結構,該結構將再次復制到結構“ person”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.