我需要在类构造函数中初始化我的变量(因为使用声明初始化它是坏的,当然,尽管在工作中)。我尝试用循环初始化它,但我不知道如何正确地做到这一点。我怎么解决这个问题?我应该使用指针吗?
class Track
{
private:
char track[18][19];
/*
need to initialize equal to
track[18][19] = {
"| |",
"| |",
"| |",
"| |",
"| |",
"| |",
"| |",
"| |",
"| |",
"| |",
"| |",
"| |",
"| |",
"| |",
"| |",
"| |",
"| |",
"| |"
};*/
public:
Track(){
for (int i=0; i<18; i++)
for (int j = 1; j < 18; j++) {
track[i][j] = ' ';
}
for (int i = 0; i < 18; i++) {
track[i][0] = '|';
track[i][sizeof(track[i]) / sizeof(track[i][0])] = '|';
}
//how to initialize track?
}
void Draw() {
for (int i = 0; i < 18; i++) {
cout << track[i] << endl;
}
}
};
答案 0 :(得分:0)
建议您将18
和19
定义为常量:
const int LENGTH = 18;
const int WIDTH = 19;
如果您希望正确打印轨道部分,您还需要有足够的空间容纳NULL终止字符:
char track[LENGTH][WIDTH + 1]; // (leave enough room for a NULL char)
至于你的循环,你只需要在每个轨道部分的末尾添加NULL字符并使用WIDTH - 1
而不是尝试使用sizeof()
来计算倒数第二个字符的索引:
Track() {
for (int i = 0; i < LENGTH; i++) {
track[i][0] = '|';
for (int j = 1; j < WIDTH - 1; j++) {
track[i][j] = ' ';
}
track[i][WIDTH - 1] = '|';
track[i][WIDTH] = '\0';
}
}