为什么我的C矩阵产生50x50?

时间:2017-11-19 21:05:15

标签: c

我正在开发一个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

1 个答案:

答案 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>