1. 程式人生 > >C++ 流控制函式setw()、setfill()、setbase()、setprecision()的使用

C++ 流控制函式setw()、setfill()、setbase()、setprecision()的使用

標頭檔案:

#include <iostream>

#include <iomanip>

功能:

std::setw :需要填充多少個字元,預設填充的字元為' '空格

std::setfill:設定std::setw將填充什麼樣的字元,如:std::setfill('*')

std::setbase(n):將輸出資料轉換為n進位制

std::setprecision():控制輸出流顯示浮點數的數字個數,C++預設的流輸出數值有效位是6。

#include <iostream>
#include <iomanip>
#include 
<sstream> #include <shlobj.h> //AppData std::wstring GetUserAppDataDir() { std::wstring appdata; wchar_t buffer[MAX_PATH]; ::ZeroMemory(buffer, MAX_PATH*sizeof(wchar_t)); if (::SHGetSpecialFolderPath(NULL, buffer, CSIDL_APPDATA, NULL)) appdata = buffer; if
(appdata.substr(appdata.length() - 1) != L"\\") { appdata.append(L"\\"); } return appdata; } //生成日誌檔案路徑 std::wstring GetLogFileName() { SYSTEMTIME sysTime; ::GetLocalTime( &sysTime ); std::wstringstream logFileName; logFileName << GetUserAppDataDir().c_str() << L"
_" << sysTime.wYear << L"_" << std::setw( 2 ) << std::setfill( L'0' ) << sysTime.wMonth << L"_" << std::setw( 2 ) << std::setfill( L'0' ) << sysTime.wDay << L"_" << std::setw( 2 ) << std::setfill( L'0' ) << sysTime.wHour << L"_" << std::setw( 2 ) << std::setfill( L'0' ) << sysTime.wMinute << L"_" << std::setw( 2 ) << std::setfill( L'0' ) << sysTime.wSecond << L".log"; return logFileName.str(); } //字串轉數字 template <class T> T to_num( const char* s ) { T tmp(0); std::istringstream is(s); is >> std::setbase(10) >> tmp;//setbase(n):將輸出資料轉換為n進位制 if(is.fail()) { return 0; } return tmp; }; //測試程式碼 int main() { int a = 1; int b = 2; char c = '$'; //輸出: 1 std::cout << std::setw( 4 ) << a << std::endl; //輸出:$$$1 std::cout << std::setw( 4 ) << std::setfill( c ) << a << std::endl; //輸出:$$$12 std::cout << std::setw( 4 ) << std::setfill( c ) << a << b << std::endl; //輸出日誌檔案路徑 std::wcout << GetLogFileName().c_str() << std::endl; std::cout << "\n" << std::endl; //std::setbase()的使用 int num = to_num<int>("1234"); long ldata = to_num<long>("123456"); std::cout << num << std::endl; std::cout << ldata << std::endl; std::cout << "\n" << std::endl; std::cout << "255(2進位制): " << std::setbase(2) << 255 << std::endl;//二進位制輸出 std::cout << "255(8進位制): " << std::setbase(8) << 255 << std::endl;//八進位制輸出 std::cout << "255(16進位制): " << std::setbase(16) << 255 << std::endl;//十六進位制輸出 //setprecision()的作用: 控制輸出流顯示浮點數的數字個數(C++預設的流輸出數值有效位是6) //如果與setiosflags(ios::fixed)合用,可以控制小數點右邊的數字個數。 //setiosflags(ios::fixed)是用定點方式表示實數。 //setiosflags(ios::scientific)是用指數方式表示實數。 std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(8) << 12.123456 << std::endl; //如果與setiosflags(ios::scientific)合用,可以控制指數表示法的小數位數。 //在用浮點表示的輸出中,setprecision(n)表示有效位數。 //在用定點表示的輸出中,setprecision(n)表示小數位數。 system("pause"); return 0; }