c++ - 使用 setw、cout 和 for

标签 c++

为什么这种不同的行为取决于它是否进入 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 << '*';

谢谢。

最佳答案

width每次调用 operator << 时,流都会自动重置(归零) .所以如果你有一个循环写入多个值,你必须使用 setw每次循环。

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

关于c++ - 使用 setw、cout 和 for,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37090676/

相关文章:

c++ - 树莓派uart波特率锁定在9600

c++ - 将两种不同类型的模板定义专门化

c++ - 检查 operator= 中的自赋值

c++ - 从常规 C++ 代码调用 CUDA 代码——整理出 extern "C"

c++ - gdb 中的递归 sizeof?

c++ - QGraphicsView 高 DPI 缩放

c++ - OSX C++ 导出函数

c++ - 使用 cURL/libcurl 上传到 Amazon S3

c++ - 为什么将超出范围的值分配给有符号类型的对象的结果在 C++ 中未定义?

c++ - 简单的 C++ 错误, "else without previous if"