首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用setw、cout和for

使用setw、cout和for
EN

Stack Overflow用户
提问于 2016-05-08 00:02:52
回答 2查看 192关注 0票数 1

为什么这种不同的行为取决于它是否进入了for语句,或者它是一个简单的重复三次的cout << '*'还是一个cout << "***"

所有的句子都有一个setw(6),就像菱形的第二行和第八行一样,但正如你所看到的,并不是所有的句子都有相同的行为。一些开始输出填充6个空格,另一些统计数据开始输出填充4个空格。

代码语言:javascript
复制
#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;
}

这是我为这段代码得到的输出:

代码语言:javascript
复制
    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *

cout << "***"
   ***
for x3 cout << '*'
     ***
cout << '*' three times
     ***

还有,不是这样的吗:

代码语言:javascript
复制
 cout << setw(6);
    for(int i = 1; i <= 3; i++)
        cout << '*';

和这个一样吗?

代码语言:javascript
复制
cout << setw(6);
cout << '*';
cout << '*';
cout << '*';

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2016-05-08 00:13:55

每次调用operator <<时,流的width都会自动重置(复位为零)。因此,如果有一个循环写入多个值,那么每次循环时都必须使用setw

http://en.cppreference.com/w/cpp/io/manip/setw

票数 2
EN

Stack Overflow用户

发布于 2016-05-08 00:23:15

对于以下内容:

代码语言:javascript
复制
cout << setw(6);
cout << "***";

***“吃掉”了std::setw提供的6个空格中的3个。

而是为了:

代码语言:javascript
复制
 cout << setw(6);
 for(int i = 1; i <= 3; i++)
      cout << '*';

代码语言:javascript
复制
cout << setw(6);
cout << '*';
cout << '*';
cout << '*';

*只“吃掉”其中一个空格。在此之后,当调用下一个cout <<时,流的width将被重置。

您无论如何都不会想要任何不同的行为,因为在最后两个示例中,维护width的替代位置将会产生* * *

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37090676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档