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; }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM