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

来源:互联网 发布:网络接口转换器怎么用 编辑:程序博客网 时间:2024/04/27 22:37

头文件:

#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>//AppDatastd::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 = '$';//输出:   1std::cout << std::setw( 4 ) << a << std::endl;//输出:$$$1std::cout << std::setw( 4 ) << std::setfill( c ) << a << std::endl;//输出:$$$12std::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;}


输出结果:


0 0
原创粉丝点击