我如何擦除最后一颗星?

How do I erase the last star?

我尝试了很多东西,但我陷入了沼泽。

当你输入一个奇数时,最后一行的一颗星会弹出,你试图擦掉它,但是很难...

#include<iostream>
using namespace std;

int main()
{   
    int num, star, line;
    cout << "num "; 
    cin >> num;
    for (line = 0; line < num/2+1; line++)
    {
        for (star = 0; star <= line; star++) 
        {
            cout << "*";
        }
        for (star = num/2; star > line; star--)
        {
            cout << "x";
        }
        for (star = num/2-1; star > line; star--)
        {
            cout << "x";
        }
        for (star = 0; star <= line; star++)
        {
            cout << "*";
        }
        cout << endl;
    }
}

问题是最后一行打破了模式。

这是你得到的:

*xxx*
**x**
******

根据您的描述,我认为这就是您想要的:

*xxx*
**x**
*****

在最后一行之前的所有行中,x:的个数都是奇数,但在最后一行中,个数是偶数(零)。您首先添加三个 *,然后添加零 x,然后添加三个 *,这样就形成了 6 个字符,而前几行只有 5 个。

修复它的直接方法可能是计算 *s 和 xs 的输出,最后打印 num 减去到目前为止打印的数量 *秒。示例:

#include <iostream>

int main() {
    int num, star, line;

    if(!(std::cin >> num)) return 1; // error

    num |= 1; // make sure the number is odd

    for (line = 0; line < num / 2 + 1; line++) {
        int output = 0; // count how many *'s and x's you've printed
        
        for (star = 0; star <= line; star++) {
            ++output;
            std::cout << '*';
        }
        for (star = num / 2; star > line; star--) {
            ++output;
            std::cout << 'x';
        }

        for (star = num / 2 - 1; star > line; star--) {
            ++output;
            std::cout << 'x';
        }

        // now print  num - output  asterisks:
        for (star = 0; star < num - output; star++) {
            std::cout << '*';
        }
        std::cout << '\n';
    }
}