📄 a_printf.cpp
字号:
/* Copyright is licensed under GNU LGPL. by I.J.Wang 2006 Compare the difference and use in printf/sscanf fassion Build: make a_printf*/#include "../src/wy_uty.h"#include <cstdio> // printf/sscanf is used for comparisonstatic void sim_printf(void){ WyRet r; WyStr str; // printf("%d",val) { int val=1289; std::printf("%d\n",val); // for comparison str=Wy::wrd(val); Wy::cout << str << " --- " << val << "--\n"; } // printf("%5d",val) { int val=1289; std::printf("%5d\n",val); // for comparison str=Wy::wrd(val); if(str.size()<5) { if((r=str.insert(0,5-str.size(),' '))!=Ok) { WY_THROW(r); } } Wy::cout << str << " --- " << val << "--\n"; } // printf("%-6d",val) { int val=-189; std::printf("%-6d\n",val); // for comparison str=Wy::wrd(val); if(str.size()<6) { if((r=str.append(6-str.size(),' '))!=Ok) { WY_THROW(r); } } Wy::cout << str << " --- " << val << "--\n"; } // printf("%06d",val) { int val=189; std::printf("%06d\n",val); // for comparison str=Wy::wrd(val); if(str.size()<6) { if((r=str.insert(0,6-str.size(),'0'))!=Ok) { WY_THROW(r); } } Wy::cout << str << " --- " << val << "--\n"; } // printf("%.2f",val) { float val=189.189; std::printf("%.2f\n",val); // for comparison str=Wy::wrd(val,10,2); Wy::cout << str << " --- " << val << "--\n"; } // printf("%.2g",val) { float val=189.189; std::printf("%.2g\n",val); // for comparison str=Wy::wrd(val,0,2); Wy::cout << str << " --- " << val << "--\n"; }};static void sim_sscanf(void){ const char Input1[]=" 12.34 345.67E-1 78.901e1 555"; WyRet r; // sscanf("%f %f %lf %d",..) { const WyCSeg txt=Input1; size_t fidx=0; float value_f1,value_f2; double value_lf; int value_d; // This loop is to use break to exit the block to // simulate sscanf (loop exactly once) // do { // convert the 1st word and print the result if((r=Wy::_scanum(value_f1,fidx,txt))!=Ok) { WY_HERE(r); break; } Wy::cout << value_f1 << ", "; // convert the 2nd word and print the result if((r=Wy::_scanum(value_f2,fidx,txt))!=Ok) { WY_HERE(r); break; } Wy::cout << value_f2 << ", "; // convert the 3rd word and print the result if((r=Wy::_scanum(value_lf,fidx,txt))!=Ok) { WY_HERE(r); break; } Wy::cout << value_lf << ", "; // convert the 4th word and print the result if((r=Wy::_scanum(value_d,fidx,txt))!=Ok) { WY_HERE(r); break; } Wy::cout << value_d << "\n"; r=Ok; } while(false); if(r!=Ok) { WY_THROW(r); } // compare by printing the result from std::sscanf if(std::sscanf(txt.begin(),"%f %f %lf %d", &value_f1,&value_f2,&value_lf,&value_d)!=4) { WY_THROW( WyRet() ); } Wy::cout << value_f1 << ", " << value_f2 << ", " << value_lf << ", " << value_d << '\n'; }};int main(void)try { sim_printf(); sim_sscanf(); return(0);}catch(const WyRet& e) { Wy::cerr << Wy::wrd(e) << '\n'; throw;}catch(...) { Wy::cerr << "unknown throw type\n"; throw;};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -