CPP Setfill()在for循环的第二步和其他步骤中重复

时间:2017-11-11 12:59:12

标签: c++

使用C ++的简单乘法表。

int main() {
    int i, j;   i = j = 1;
    for (i; i < 10; i++) {
        for (j = 1; j < 10; j++)
            cout << setw(3) << i*j;
        cout << endl << setw(3) << setfill('x');
    }   
}

输出是:

  1  2  3  4  5  6  7  8  9
xx2xx4xx6xx8x10x12x14x16x18
xx3xx6xx9x12x15x18x21x24x27
xx4xx8x12x16x20x24x28x32x36
xx5x10x15x20x25x30x35x40x45
xx6x12x18x24x30x36x42x48x54
xx7x14x21x28x35x42x49x56x63
xx8x16x24x32x40x48x56x64x72
xx9x18x27x36x45x54x63x72x81

但我期待的是:

  1  2  3  4  5  6  7  8  9
xx2  4  6  8 10 12 14 16 18
xx3  6  9 12 15 18 21 24 27
xx4  8 12 16 20 24 28 32 36
xx5 10 15 20 25 30 35 40 45
xx6 12 18 24 30 36 42 48 54
xx7 14 21 28 35 42 49 56 63
xx8 16 24 32 40 48 56 64 72
xx9 18 27 36 45 54 63 72 81

我在这里缺少什么?感谢。

1 个答案:

答案 0 :(得分:4)

std::setfill is a "sticky" manipulator:它会更改ostream的状态,直到它被还原为止。

如果在打印完第一个号码后还原它,您将获得预期的输出:

for (i; i < 10; i++) {
    for (j = 1; j < 10; j++)
        cout << setw(3) << i*j << setfill(' ');
    cout << endl << setw(3) << setfill('x');
}   

live example on wandbox.org