我正在尝试编写一个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;
}
答案 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;
为了实现这一点,您需要同时包含iostream
和iomanip
(setw
是iomanip
的一部分)。
也可以使用方法来填充顶部和底部行以使用给定字符填充空格,但我现在无法回想起该方法。
答案 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)
尝试提示用户输入行数和列数。然后,使用嵌套循环,根据用户输入显示一个星形的矩形。