gpt4 book ai didi

c - 为什么我的 C 矩阵生成 50x50?

转载 作者:行者123 更新时间:2023-11-30 19:32:09 27 4
gpt4 key购买 nike

我正在开发一个 connect4 类型的游戏(有 n 个用户定义的行/列/连续的棋子才能获胜)。它必须通过 make 文件中的命令行进行初始化,例如: ./connectn.out 3 3 3 其中 3 3 3 代表行/列/片行以获胜。当我运行这个时,我得到一个 50x50 的矩阵,而不是 3x3!我想知道问题是否出在命令行参数代码中。我正在使用的书仅包含使用 char rowStr[100]= "" 的示例,我认为它实际上应该是 int?除了整数之外,我不会在命令行中输入任何内容,因此我不确定该字符是否必要。

这是 main.c 文件中的一些代码。我认为问题可能出在 int numRows = *rowStr; 上?也许是因为我将 int 定义为一个数组,它给了我 50 而不是 3?

int main(int argc, char* argv[]) {

char rowStr[100] = ""; // Number of rows
char colStr[100] = ""; // Number of columns
char toWinStr[100] = ""; //Number of pieces in a row to win

if (argc < 4) {
printf("Not enough arguments entered\n"
"Usage connectn.out numRows numCols\n"
"numToWin\n");
return 1; // 1 indicates error
}else if (argc > 4) {
printf("Too many arguments entered\n"
"Usage connectn.out numRows numCols\n"
"numToWin\n");
return 1; // 1 indicates error
}

// Grab inputs from command line
strcpy(rowStr, argv[1]);
strcpy(colStr, argv[2]);
strcpy(toWinStr, argv[3]);

// Output result

const char blankSpace = '*'; //easier to show a blank space as a *
int numRows= *rowStr; //User defined
int numCols= *colStr; //User defined
int numToWin= *toWinStr; //User defined
const char pieces[] = "XO";
char **board = createBoard(numRows, numCols, blankSpace);
int rowPlayed, colPlayed;
int playerTurn = 0; //0 means player1, 1 means player 2

//Here's a bunch of functions
while (!isGameOver(board, numRows, numCols, blankSpace, numToWin)) {
displayBoard(board, numRows, numCols);
getMove(board, numRows, numCols, blankSpace, &rowPlayed, &colPlayed);
makeMove(board, rowPlayed, colPlayed, pieces[playerTurn]);
playerTurn = changeTurn(playerTurn);
}

declareWinnerorTie(playerTurn, board, numRows, numCols, blankSpace, numToWin);
cleanUp(&board, numRows, numCols);

return 0;

}

以下是 board.c 文件中的代码,板是在其中创建的。如果 numRows 和 numCols 是 const int 并设置为数字,例如 3,则打印效果非常好。

关于如何让用户输入正确地确定矩阵大小有什么想法吗?

void displayBoard(char **board, int numRows, int numCols) {
//print board
for (int row = 0; row < numRows; ++row) {
printf("%d ", row);
for (int col = 0; col < numCols; ++col) {
printf("%c ", board[row][col]);
}
printf("\n");
}
//Print column headers
printf(" ");
for (int col = 0; col < numCols; ++col) {
printf("%d ", col);
}
printf("\n");
}

char **createBoard(int numRows, int numCols, const char blankSpace) {
char **board = (char **) malloc(numRows * sizeof(char *));
for (int row = 0; row < numRows; ++row) {
board[row] = (char *) malloc(numCols * sizeof(char));
for (int col = 0; col < numCols; ++col) {
board[row][col] = blankSpace;
}
}
return board;
}

这是我从命令行运行程序时显示的内容的截断图片。 50x50MatrixBoard

最佳答案

int numRows= *rowStr; //User defined 
int numCols= *colStr; //User defined
int numToWin= *toWinStr; //User defined

您将 rowStr、colStr、toWinStr 的第一个字符分配给整数类型变量,因此您得到 50 而不是 3,请查看 this table 处的 ASCII 数字 3 的值

这里你需要的是

int numRows= atoi(rowStr); //User defined 
int numCols= atoi(colStr); //User defined
int numToWin= atoi(toWinStr); //User define

#include <stdlib.h>

关于c - 为什么我的 C 矩阵生成 50x50?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47382000/

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