名稱空間
變體
操作

std::setw

來自 cppreference.com
< cpp‎ | io‎ | manip
 
 
 
輸入/輸出操縱器
浮點格式化
整數格式化
布林格式化
欄位寬度和填充控制
setw
其他格式化
空白字元處理
輸出重新整理
(C++20)  

狀態標誌操作
時間與金錢 I/O
(C++11)
(C++11)
(C++11)
(C++11)
帶引號的操縱器
(C++14)
 
定義於標頭檔案 <iomanip>
/* 未指定 */ setw( int n );

當在表示式 out << std::setw(n)in >> std::setw(n) 中使用時,它將流 outinwidth 引數設定為精確的 n

某些操作會將寬度重置為零(參見下文),因此可能需要重複呼叫 std::setw 以設定多次操作的寬度。

目錄

[編輯] 引數

n - 寬度的新值

[編輯] 返回值

一個未指定型別的物件,使得

  • 如果 out 是型別為 std::basic_ostream<CharT, Traits> 的物件,則表示式 out << setw(n)
    • 的型別為 std::basic_ostream<CharT, Traits>&
    • 值為 out
    • 其行為如同呼叫了 f(out, n)
  • 如果 in 是型別為 std::basic_istream<CharT, Traits> 的物件,則表示式 in >> setw(n)

其中函式 f 定義為

void f(std::ios_base& str, int n)
{
    // set width
    str.width(n);
}

[編輯] 注意

如果呼叫以下任何函式,流的寬度屬性將被重置為零(表示“未指定”):

  • 輸入
  • 輸出

此修飾符對輸入和輸出的具體影響因各個 I/O 函式而異,並在每個 operator<<operator>> 過載頁面中單獨描述。

[編輯] 示例

#include <iomanip>
#include <iostream>
#include <sstream>
 
int main()
{
    std::cout << "no setw: [" << 42 << "]\n"
              << "setw(6): [" << std::setw(6) << 42 << "]\n"
              << "no setw, several elements: [" << 89 << 12 << 34 << "]\n"
              << "setw(6), several elements: [" << 89 << std::setw(6) << 12 << 34 << "]\n";
 
    std::istringstream is("hello, world");
    char arr[10];
 
    is >> std::setw(6) >> arr;
    std::cout << "Input from \"" << is.str() << "\" with setw(6) gave \""
              << arr << "\"\n";
}

輸出

no setw: [42]
setw(6): [    42]
no setw, several elements: [891234]
setw(6), several elements: [89    1234]
Input from "hello, world" with setw(6) gave "hello"

[編輯] 缺陷報告

下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。

缺陷報告 應用於 釋出時的行為 正確的行為
LWG 183 C++98 setw 只能與流一起使用
型別 std::ostreamstd::istream
可用於任何
字元流

[編輯] 另請參閱

管理欄位寬度
(std::ios_base 的公共成員函式) [編輯]
更改填充字元
(函式模板) [編輯]
設定填充字元的位置
(函式) [編輯]
控制是否使用字首指示數字基數
(函式) [編輯]