随笔 - 132  文章 - 51  trackbacks - 0
<2012年3月>
26272829123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

留言簿(7)

随笔分类

随笔档案

文章分类

文章档案

cocos2d-x

OGRE

OPenGL

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 
    对于熟悉C的人来说,sprintf并不陌生,在很多情况下,一般都会使用sprintf来代替itoa.sprintf函数的原型是:
int sprintf(char* str, const char* format, ...);
    除了前两个参数类型固定外,后面可以接任意多个参数,格式化输出一个字符串:
1) 整数格式化输出
    如果要将数字 3915 保存到字符串str中/*假定字符串够长,以下都是为这样*/.
    sprintf(str,"%d",3915); // "3915"  这是最基本的输出
    sprintf(str,"%5d",3915); // " 3915" 右对齐,相当于C++中的制表符,如数字没有5位时左另用空格补满.
    sprintf(str,"%05d",3915); // "03915"右对齐,相当于C++中的制表符,如数字没有5位时左另用'0'补满
    sprintf(str,"%3d",3915); // "3915", 如果数字长度超出时,输出完整的数字
    sprintf(str,"%-5d",3915); // "3915 " 左对齐,如数字没有5位时左另用空格补满,超出时输出所有数字
    对于十六进制也类同于十进制
    sprintf(s, "%5x", 3915);  // "  f4b"右对齐,小写16 进制,宽度占5 个位置
    sprintf(s, "%5X", 3915);  // "  F4B"右对齐,大写16 进制,宽度占5 个位置

2) 浮点数格式化输出
    如果要将浮点数字 3.915 保存到字符串str中
    sprintf(str,"%f",3.915); // "3.915" 这是最基本的输出,显示完整的数字
    sprintf(str,"%.2f",3.915); // "3.92" 保留二位小数,注意的一点是,这里是四舍五入,面不是像取整那样丢掉小数位.但还存在一个问题,就是当前面的整数部分数据大时,也有可能直接丢掉后面位.
    
对于数字转字符串还有一个要注意的问题,就是后面数字的类型不一值的时候就可能得不到你想要的结果,需要强制转换一下,如:
    int ii = 3915;
    sprintf(str,"%f",ii); // 这样你就会遇到传闻中的R6002,float point not load 的错误,我在VS中写C++命令行程序,直接一闪而过,断点之类的都没用.可以改成:
    sprintf(str,"%f",(float)ii); // 这样就正常以浮点输出了   

3) 字符串的格式化输出
    如果要将字符串"guoke"保存到字符串str中
    sprintf(str,"%s","guoke"); // "guoke"最基本的,直接copy
    sprintf(str,"%6s","guoke"); // " guoke" 右对齐,超出时,输出全部字符串
    sprintf(str,"%.3s","guoke"); // " guo"   只读取字前三个字符,如果字符串不足3个取全部
    sprintf(str,"%-6s","guoke"); //  "guoke " 左对齐,超出时,输出全部字符串
    sprintf(str,"%6.3s","guoke"); // "   guo" 右对齐,宽宽6,只取字符串前3个字符.如果字符串不足3个取全部
    sprintf(str,"%-6.3s","guoke"); // "guo   " 左对齐,宽宽6,只取字符串前3个字符.如果字符串不足3个取全部
    sprintf(str,"%3.6s","guoke"); // "guoke" 这样感觉好像没什么大的作用,当所取的字符串长度大于3是还是会输出全部字符串的.
posted on 2011-02-17 10:35 风轻云淡 阅读(9952) 评论(0)  编辑 收藏 引用 所属分类: C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理