我需要帮助来编写一个程序来打印出从用户那里获取行数的形状

I need help to writing a program that prints out shape that takes number of rows from user

形状应该是这样的:shape

比如这个图有10行。形状应该继续这种模式。

到目前为止,这是我的代码:

#include <iostream>
using namespace std;
int main()
{
    int rows, a, b, c, d;
    cout << "Enter the number of the rows: ";
    cin >> rows;
    for (a = 1; a <= rows; a++) {
        for (b = 1; b <= a; b = a + 4) {
            cout << "   ******" << endl;
        }
        for (c = 2; c <= rows; c += 2) {
            cout << " **********" << endl;
        }
        for (d = 3; d <= rows; d += 4) {
            cout << "************" << endl;
        }
    }
    return 0;
}

我无法按顺序恢复它。比如我输入值5,每行重复5次,但是我希望行数是5。

这是一个解决方案:

#include <iostream>
#include <iomanip>


int main( )
{
    std::cout << "Enter the number of the rows: ";
    std::size_t rowCount { };
    std::cin >> rowCount;

    constexpr std::size_t initialAsteriskCount { 6 };
    std::size_t asteriskCount { initialAsteriskCount };
    bool isIncreasing { };
    int fieldWidth { initialAsteriskCount + 3 };

    for ( std::size_t row = 0; row < rowCount; ++row )
    {
        std::cout << std::right << std::setw( fieldWidth ) << std::setfill(' ')
                  << std::string( asteriskCount, '*' ) << '\n';

        switch ( asteriskCount )
        {
            break; case 6:
                isIncreasing = true;
                asteriskCount += 4;
                fieldWidth = 11;
            break; case 10:
                asteriskCount += ( isIncreasing ) ? 2 : -4;
                fieldWidth = ( isIncreasing ) ? 12 : 9;
            break; case 12:
                isIncreasing = false;
                asteriskCount -= 2;
                fieldWidth = 11;
        }
    }

    return 0;
}

这或许可以再简化一点。但它工作正常。

此外,请注意 switch 语句的语法乍一看可能有点奇怪。但这是编写 switch 块的新的更安全的方法,并得到专家的推荐。