一个简单的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

我在这里想念什么?谢谢。

最佳答案

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

09-07 09:43