为什么这种不同的行为取决于它是否成为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 << '*';
谢谢。
答案 0 :(得分:2)
每次调用import types
时,流的width
都会自动重置(为零)。因此,如果您有一个循环写入多个值,则每次循环时都必须使用operator <<
。
答案 1 :(得分:1)
对于以下内容:
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 << '*';
*
仅'吃'其中一个空格。之后,当调用下一个width
时,将重置流的cout <<
。
你不会想要任何不同的行为,因为保留width
的替代方案在最后两个例子中会有* * *
。