初始化3d char数组

时间:2013-09-06 22:32:20

标签: c++ c++11

我在初始化我的char [] [] []数组时遇到了问题,并显示了我从未真正使用过的数据,但必须立即使用,所以我对它不是很熟悉。该阵列用于预订系统,用户e要求在甲板1栏1第1行说出一个应该是“i”的小屋

标头文件

#include <iostream>
#include <string>

using namespace std;

class Ship
{
public:

Ship()
{
}

char cabins[13][4][1];
void setArray();
void showArray();
};

3 个答案:

答案 0 :(得分:2)

你写了这个

for (int k = 0; k < 13; k++)
{

    for (int j = 0; j< 1; j++)
    {
        for (int i = 0; i< 4; i++)
        {
    cabins[13][4][1] =  (("b" "i" "i" "b") 

哪个会遍历数组中的所有字符,然后尝试分配整个数组,如果它有效,或者是有效的C ++。

我不确定“(”b“”我“”我“”b“)应该是什么,但你似乎错过了一些C ++基础知识。你真正想要的是更像是什么< / p>

char cabins[13][4]; // only needs to be 2d.

void Ship::setArray()
{
    cabins = {
       { 'b', 'i', 'i', 'b' },
       { 'b', 'i', 'i', 'b' },
       ...
    };
}

[编辑:我早点回来,在笔记本电脑上工作,对不起]

这也行不通。如果这里的数组定义是持久的,你需要将它存储在某个地方。

这是一个完整的单一编译单元示例,说明如何解决它:

#include <iostream>
#include <cstring> // for memcpy

class Ship {
public:
    Ship() {}
    char m_cabins[4][4];
    void setArray();
};

void Ship::setArray() {
    static const char defaultCabinLayout[4][4] = {
        { 'b', 'i', 'i', 'b' },
        { 'b', 'i', 'i', 'b' },
        { 'w', 'i', 'i', 'w' },
        { 'w', 'i', 'i', 'w' },
    };
    static_assert(sizeof(m_cabins) == sizeof(defaultCabinLayout), "defaultCabinLayout does not match m_cabins");
    memcpy(m_cabins, defaultCabinLayout, sizeof(m_cabins));
}

int main() {
    Ship s;
    s.setArray();
    std::cout << "cabins[0][0] = " << s.m_cabins[0][0] << std::endl;    
}

答案 1 :(得分:1)

在初始化中使用大括号{ },而不是括号。 在它们之间添加逗号! 而且,数组在循环中的定义是什么? 哦,我的......

答案 2 :(得分:0)

应该是这个......

cabins[k][j][i] 

如果您尝试在某些索引处初始化它,那么在循环中。

例如

cabins[1][1][1] = 1; 

这是将deck 1列1和行1的值设置为1。

当您循环浏览这3个for循环时,您正在递增i, j, k

我真的不明白你是如何为每个索引分配值的......所以如果你详细说明我可以帮助你多一点。