在c++中用常量字符串初始化矩阵



我试图用一个常量字符串(即"@")初始化这个矩阵,以便稍后填充它。因此,输出不是我所期望的。你能告诉我我哪里做错了吗?你能给我一些建议,如何更好地初始化矩阵与常量字符串?

#include <iostream>
#include <string>
using namespace std;
char* Board[3][3];
char* PLAYER = "X";
char* COMPUTER = "O";
void displayBoard() {
printf(" %c | %c | %c ", Board[0][0], Board[0][1], Board[0][2]);
printf("n---|---|---n", Board[0][0], Board[0][1], Board[0][2]);
printf(" %c | %c | %c ", Board[1][0], Board[1][1], Board[1][2]);
printf("n---|---|---n", Board[0][0], Board[0][1], Board[0][2]);
printf(" %c | %c | %c ", Board[2][0], Board[2][1], Board[2][2]);
printf("n---|---|---n", Board[0][0], Board[0][1], Board[0][2]);
}
void FillBoard() {
char* initialValue = "@";
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
Board[i][j] = initialValue;
}
}
}
int main () {
FillBoard();
displayBoard();
}

输出:

f | f | f
---|---|---
f | f | f
---|---|---
f | f | f
---|---|---

有很多问题。注释中的解释

但是正如上面的一个评论所说:找一本好的c++书。顺便说一句你的代码比c++代码,而C代码。

#include <iostream>
#include <string>
using namespace std;
char Board[3][3];
const char PLAYER = 'X';    // you don't need a pointer here, you need a char here
const char COMPUTER = 'O';  // same as above
void displayBoard() {
printf(" %c | %c | %c ", Board[0][0], Board[0][1], Board[0][2]);
printf("n---|---|---n");   // removed the extra arguments
printf(" %c | %c | %c ", Board[1][0], Board[1][1], Board[1][2]);
printf("n---|---|---n");   // removed the extra arguments
printf(" %c | %c | %c ", Board[2][0], Board[2][1], Board[2][2]);
printf("n---|---|---n");   // removed the extra arguments
}
void FillBoard() {
const char initialValue = '@';  // you don't need a pointer here, you need a char here
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
Board[i][j] = initialValue;
}
}
}
int main() {
FillBoard();
displayBoard();
}

首先,您在上面的代码示例中犯了一个严重的错误。永远不要写(至少在c++中):

char* initialValue = "@";    //incorrect

正确的写法应该是:

const char* initialValue = "@";    //correct

这是因为禁止使用不带const关键字的字符串字面值。看到

您也可以使用/创建char的矩阵而不是char*,就像您在示例中所做的那样,类似地用于char*的其他用途。Jabberwocky的回答是这样的。

最新更新