需要帮助使用for循环在C ++中制作恒定宽度的轨道

时间:2013-12-01 22:12:21

标签: c++ visual-studio-2010 for-loop

我需要使用for循环来制作这样的东西,而不是单独打印每一行:

enter image description here

到目前为止,我有一个类似于直角三角形的东西,这是一个开始。

void roadBound() {
const int ROW = 17;
const int GAP = 10;
const int NUM = -17;

for (int i=ROW, g=GAP, n = NUM ; i>=0; i--, g+=2)
{
    for (int j=n; j<i; j++) 
        cout << '*';
    for (int j=0; j<g; j++) 
        cout << ' ';
    for (int j=n; j<i; j++) 
        cout << '*';
    cout << endl;
}

}

其输出如下:enter image description here

2 个答案:

答案 0 :(得分:0)

不要增加gap,你希望它是恒定的。

答案 1 :(得分:0)

希望这会有所帮助。你可以简化它,但由于OP是一个新手,他可能会更好地理解它。

int iteration = 0;
const int rowMaxSize = 25;
const int gapSize = 10;
const int leftSizeMin = 3;
const int leftSizeMax = 10;
const int iterationMax = 40;

int currentLeftSize = leftSizeMin;
bool increasing = true;

do {
    for(int i = 0; i < currentLeftSize; i++) {
        cout << "*"; 
    }
    for(int i = 0; i < gapSize; i++) {
        cout << " "; 
    }
    for(int i = 0; i < rowMaxSize - gapSize - currentLeftSize; i++) {
        cout << "*"; 
    }
    if(currentLeftSize >= leftSizeMax) {
        increasing = false;
    } else if (currentLeftSize == leftSizeMin) {
        increasing = true;
    }
    if(increasing) {
        currentLeftSize++;
    } else {
        currentLeftSize--;
    }
    cout << endl;
} while( iteration++ < iterationMax );