我正在开发一个connect4类型的游戏(连续n个用户定义的行/列/片段来赢取)。它必须通过命令行从make文件初始化,例如:./connectn.out 3 3 3
其中3 3 3
表示连续行中的行/列/片段以获胜。当我运行这个时,我得到一个50x50的矩阵,而不是3x3!我想知道问题是否在于命令行参数代码。我正在使用的这本书只有使用char rowStr[100]= ""
的例子,我认为它应该是int
?我不会在命令行中输入任何内容,所以我不确定char是否必要。
这是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
答案 0 :(得分:0)
int numRows= *rowStr; //User defined
int numCols= *colStr; //User defined
int numToWin= *toWinStr; //User defined
你将rowStr,colStr,toWinStr的第一个char设置为整数类型变量,你得到50而不是3的原因,请查看{3}处的ASCII数字3的值
这里需要的是
int numRows= atoi(rowStr); //User defined
int numCols= atoi(colStr); //User defined
int numToWin= atoi(toWinStr); //User define
#include <stdlib.h>