2017-11-11 45 views
3

使用C++的简单乘法表。CPP Setfill()在循环的第二步和其他步骤中重复自己

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

实际上可以SO还问你(在页面,你应该在发布前已经阅读)提供一个[mcve],也就是说你应该在你的真实代码中添加你明显使用的includes和'using namespace std;'。不过,我在高层抱怨,恕我直言,你的问题很好 – user463035818

回答

4

std::setfillis 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