用星号绘制一个矩形

时间:2015-04-28 19:39:40

标签: c++

我正在尝试编写一个C ++程序来显示以星号绘制的矩形。我的程序运行正常,只是我的矩形高度的一侧打印。这是我目前为显示矩形方法编写的代码。

void Rectangle::displayRectangle()
{
    int i=0, j=0;
    for (int i = 0; i < width; i++)
    {
        cout << "*";
    }
    cout << endl;
    for (int i = 0; i < height - 2; i++)
    {
        cout << "*";
        for (int j = 0; j < width; j++)
        {
            cout << " ";
        }
        cout << endl;
    }
    for (int i = 0; i < width; i++)
    {
        cout << "*";
    }
    cout << endl;
}

4 个答案:

答案 0 :(得分:1)

在开始时指定宽度和高度,然后您只需要3个循环。第一个将打印矩形的顶行。第二个将打印矩形的两侧(减去两侧的顶部和底部)。第三个将打印矩形的底线。

喜欢这样

// Width and height must both be at least 2
unsigned int width = 7;  // Example value
unsigned int height = 5; // Example value
// Print top row
for(unsigned int i = 0; i < width; i++);
{
    std::cout << "*";
}
std::cout << std::endl;
// Print sides
for(unsigned int i = 0; i < height - 2; i++)
{
    std::cout << std::setw(width - 1) << std::left << "*";
    std::cout << "*" << std::endl;
}
// Print bottom row
for(unsigned int i = 0; i < width; i++)
{
    std::cout << "*";
}
std::endl;

为了实现这一点,您需要同时包含iostreamiomanipsetwiomanip的一部分)。

也可以使用方法来填充顶部和底部行以使用给定字符填充空格,但我现在无法回想起该方法。

答案 1 :(得分:0)

好吧,你没有看到第二条垂直线,因为你没有在线环中绘制它。

void DrawRect(int w, int h, char c)
{
    cout << string(w, c) << '\n';
    for (int y = 1; y < h - 1; ++y)
        cout << c << string(w - 2, ' ') << c << '\n';
    cout << string(w, c) << '\n';
}

答案 2 :(得分:0)

这可以更轻松,更清晰 这里的逻辑是从一行到另一行绘制,所以你只需要一个循环
 (我选择在这个例子中使用auto说明符,因为我认为它看起来更整洁并且经常在现代c ++中使用,如果你的编译器不支持c ++ 11,则使用char,int等。)

int main()
{
    using namespace std;

    auto star      = '*';
    auto space     = ' ';
    auto width     = 20;
    auto height    = 5;
    auto space_cnt = width-2;

    for (int i{0}; i != height+1; ++i) {
        // if 'i' is the first line or the last line, print stars all the way.
        if (i == 0 || i == height)
            cout << string(width, star) << endl;
        else // print [star, space, star]
            cout << star << string(space_cnt, space) << star << endl;
    }
}

答案 3 :(得分:0)

尝试提示用户输入行数和列数。然后,使用嵌套循环,根据用户输入显示一个星形的矩形。