簡體   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