繁体   English   中英

setw 流操纵器是如何工作的?

[英]How does the setw stream manipulator work?

我想知道, setw流操纵器(空间计数)如何工作? 例如,当有 1 个\t时,我想用四个空格打印a ,所以我使用\t并将\tsetw进行比较。

我写的代码:

# include <iostream>
# include <iomanip>
int main()
{
    std::cout<<"\t"<<"a\n";
    std::cout<<std::setw(9)<<"a\n";
    return 0;
}

输出

   a // This is 1 '\t'
   a // This is setw()

所以我的想法是:

setw(18) = \t\t

听起来合乎逻辑吧? 但是当我尝试这段代码时:

# include <iostream>
# include <iomanip>
int main()
{
    std::cout<<"\t\t"<<"a\n";
    std::cout<<std::setw(18)<<"a";
    return 0;
}

它给了我这个输出:

      a
       a

怎么了?

那是因为您需要在setw(18)添加一个\n 这适用于任何setw

示例代码:

# include <iostream>
# include <iomanip>
int main()
{
std::cout<<"\t\t"<<"a\n";
std::cout<<std::setw(18)<<"a\n"; // And you add the \n here
return 0;
}

输出:

        a
        a

什么是实际的“endl”(或任何 output 操纵器)? 它是如何实现的以及它如何与 operator&lt; <!--?</div--><div id="text_translate"><p> 什么是endl ? 当然,它会打印一个新行并刷新 ostream 缓冲区。 但实际上它是什么? 程序员可以定义像endl这样的“实体”吗?</p><p> 可以使用库iomanip访问这些“输出操纵器”,但在执行以下命令时实际发生了什么: cout &lt;&lt; setprecision(5);</p><p> setprecision setprecision()看起来像一个 function 调用,但使用cout实例时没有打印任何内容。 它改变了精度,但为什么干脆不使用相应的 function 成员,而不是在代码编写中添加更多“抽象”? 抽象是指非直观的代码。</p><p> 谢谢!</p></div>

[英]What is in reality “endl” (or any output manipulator)? How is it implemented and how does it work with operator<<?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM