为什么这种不同的行为取决于它是否进入了for语句,或者它是一个简单的重复三次的cout << '*'还是一个cout << "***"?
所有的句子都有一个setw(6),就像菱形的第二行和第八行一样,但正如你所看到的,并不是所有的句子都有相同的行为。一些开始输出填充6个空格,另一些统计数据开始输出填充4个空格。
#include <iostream>
using std::cout;
#include <iomanip>
using std::setw;
int main(){
int ast = 1,
pos = 5;
for(int i = 1; i <= 9; i++) {
cout << setw(pos);
for(int j = 1; j <= ast; j++)
cout << '*';
if(i <= 4) {
ast += 2;
pos -= 1;
}
else {
ast -= 2;
pos += 1;
}
cout << '\n';
}
cout << '\n';
cout << "cout << \"***\"\n";
cout << setw(6);
cout << "***";
cout << '\n';
cout << "for x3 cout << '*'\n";
cout << setw(6);
for(int i = 1; i <= 3; i++) // this should look like the first for statement, but not
cout << '*';
cout << '\n';
cout << "cout << '*' three times\n";
cout << setw(6);
cout << '*';
cout << '*';
cout << '*';
cout << '\n';
return 0;
}这是我为这段代码得到的输出:
*
***
*****
*******
*********
*******
*****
***
*
cout << "***"
***
for x3 cout << '*'
***
cout << '*' three times
***还有,不是这样的吗:
cout << setw(6);
for(int i = 1; i <= 3; i++)
cout << '*';和这个一样吗?
cout << setw(6);
cout << '*';
cout << '*';
cout << '*';谢谢。
发布于 2016-05-08 00:13:55
每次调用operator <<时,流的width都会自动重置(复位为零)。因此,如果有一个循环写入多个值,那么每次循环时都必须使用setw。
http://en.cppreference.com/w/cpp/io/manip/setw
发布于 2016-05-08 00:23:15
对于以下内容:
cout << setw(6);
cout << "***";***“吃掉”了std::setw提供的6个空格中的3个。
而是为了:
cout << setw(6);
for(int i = 1; i <= 3; i++)
cout << '*';和
cout << setw(6);
cout << '*';
cout << '*';
cout << '*';*只“吃掉”其中一个空格。在此之后,当调用下一个cout <<时,流的width将被重置。
您无论如何都不会想要任何不同的行为,因为在最后两个示例中,维护width的替代位置将会产生* * *。
https://stackoverflow.com/questions/37090676
复制相似问题