1

在此处输入图像描述

我有一个任务,简而言之,我必须制作一个简单的海战游戏。我以为这很容易,但我被困住了。但现在我被困住了。我有一个问题,我无法正确显示我的数组,它没有很好地对齐。如果你能帮助我就太好了

void show(char BATTLEFIELD[columns][rows])
{
    std::string alfa[rows + 1] = { "A|", "B|", "C|", "D|", "E|", "F|", "G|", "H|", "I|", "J|" };

    char num[11] = { ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };

    for (int i = 0; i < 11; i++)
    {
        std::cout << std::setw(width) << num[i];
    }

    std::cout << std::endl;
    for (int z = 0; z < (columns*width); z++)
    {
        std::cout << "-";
    }
    std::cout << std::endl;
    for (int i = 0; i < columns; i++)
    {

        for (int z = 0; z < rows; z++)
        {
            if (z == 0)
            {
                std::cout << alfa[i];
            }
            std::cout << std::setw(width) << veld[i][z];
        }
        std::cout << std::endl;
    }
    std::cout << std::endl;
}

我将放两张带有预期和意外结果的图片。

预期结果:

预期结果

意外结果:

意外的结果

4

1 回答 1

0

假设这些声明

constexpr int rows{10};
constexpr int columns{10};
constexpr int width{3};

结果之间的视觉差异是由于几个问题造成的。

'-'由 组成的水平线width短(您正在计算表格的大小,但您错过了标签)。您可以利用std::string构造函数来打印它

std::cout << '\n' << std::string((columns + 1) * width, '-') << '\n';

要对齐其他行,您只需要一个额外的空间。

std::cout << ' ' << alfa[i];
//           ^^^                                  You could use std::setw(width), instead
for (int z = 0; z < rows; z++)
{
     std::cout << std::setw(width) << veld[i][z];
     //                               ^^^^        Note that the parameter is called BATTLEFIELD 
}
std::cout << std::endl;
于 2019-12-27T10:16:10.763 回答