【问题标题】:Print out a text in the middle of a rectangle打印出一个矩形中间的文本
【发布时间】:2021-12-30 04:21:05
【问题描述】:

我想打印一个矩形,在中间我想输出一个首选文本。

所以在终端中应该是这样的:

Enter width and height: 5 6

+-----+
|     |
|     |
|     |
|     |
|     |
+-----+

然后在矩形(height/2) 的中间打印出“Hey”。它不适合这个例子,因为 reddit 上的格式与我的编译器有点不同。

但是我想知道如何才能做到这一点?我可以创建矩形,但似乎无法创建“when”语句,如“when mid occurs, print out "Hey"”。

我需要帮助找到一种方法来编写这样的声明。

这是我的代码:

#include <iostream>
#include <iomanip>
using namespace std;

void print_row (int const width)
{
    cout << '+' << '-';
    for (int i = 1; i < width; ++i)
    {
        cout << '-';
    }
    cout << '+' << endl;
}

void print_rectangle (int const width, int const height)
{
    int mid = height/2;
    print_row(width);
    for (int i {}; i < height; ++i)
    {
        cout << '|' << setw(width+1) << '|' << endl;
        if (mid)
        {
             cout << "Hey" << endl;
        }
    }
    print_row(width);
}

int main()
{
    int width {};
    int height {};
    cout << "Enter width and height: ";
    cin >> width >> height;
    print_rectangle(width,height);
    return 0;
}

【问题讨论】:

  • 请去掉双倍行距并使用适当的缩进。
  • if (i == mid) 更接近您想要的,但您需要将左侧和右侧打印分成两个语句或将左侧和右侧打印添加到条件 and 为真时跳过正常打印。

标签: c++


【解决方案1】:

首先在print_rectangle 中验证您的宽度和高度

String output = "hey";
if(width < output.length() || height <= 0) return;

并像这样更改 for 循环

    for (int i = 0; i < height; ++i) {
        if (i == mid) {
             int spacing = width - output.length();
             cout <<'|'<< setw(width-spacing/2) << output << setw(spacing/2+1) << '|' << endl;
             continue;
        }
        cout << '|' << setw(width+1) << '|' << endl;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 2020-10-05
    • 2014-06-26
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多