Chinaunix首页 | 论坛 | 博客
  • 博客访问: 847883
  • 博文数量: 756
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 4980
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:40
文章分类

全部博文(756)

文章存档

2011年(1)

2008年(755)

我的朋友

分类:

2008-10-13 16:14:17

古人但凡要做一件大事,总是要先沐浴更衣。比如诸葛亮借东风,就沐浴更衣后披头散发的大作文章。姜子牙做法事,也总是先沐浴更衣然后再掐咒念诀。这么搞科学吗?为什么要这么搞?我觉得这样做能够使头脑清醒,使精神放松,使全身更有序的工作。可惜老板总是不许我们上班的时候先沐浴更衣,然后穿着睡衣、踩着拖鞋写代码,于是产品中便出现了无穷无尽的bug……

闲言少叙,书归正传。(最近实在是才尽,blog好久没有更新,所以把这家丑卖卖,博取两三点铜钱。大老爷儿们,父老乡亲门,大姑大姐叔叔阿姨,有钱的帮个钱场,没钱的帮个人场,当当当……)今天就连sprintf()也着捉弄了我一把,想打印一个%出来,竟然也打不出来。我的代码是这么写的:
#include 

int main(int argc, char *argv[])
{
    int t = 5;
    char buf[100];
    sprintf(buf, "%% Hello, world %d times! ", t);
    printf(buf);
    
    return 0;
}
//期望显示为:% Hello, world 5 times!
//实际显示为:Hello, world 5 times!
//想打印的%没有打印出来
看出什么毛病了么?我想除了天天处理字符串的人,才能把这个错看成一个眼中钉。笨笨如我,就愣是半天没看出为嘛没有打印出%来。我们知道printf()这一系的函数是靠一个参数(记做format参数)来控制输出格式的,如果含有%s,就表示对应位置是一个字符串,如果是%d,就表示对应位置是一个int型变量。如果想在format中占个%号的地儿,就必须连续写两个%,也就是上面代码中的sprintf()的format参数那样子,否则只有一个%,sprintf()将会忽略之,不做处理。但是,为什么最终结果没有%呢?我连续想歪了无数理由(基本功不扎实啊)。

其实说穿了不值一钱,请诸位上眼关瞧。
//为了清楚起见,我把字符串都用""给括起来
sprintf(buf, "%% Hello, world %d times! ", t); //执行后的buf其实是"% Hello, world 5 times!"
printf(buf); //printf("% Hello, world 5 times!");的结果是"Hello, world 5 times!",一个%会被忽略掉
哈哈,所以说,要想先用sprintf(),最后又用printf()去打印buf,就要这么写才行:
#include 

int main(int argc, char *argv[])
{
    int t = 5;
    char buf[100];
    sprintf(buf, "%%%% Hello, world %d times! ", t);
    printf(buf);
    
    return 0;
}
//结果显示为:% Hello, world 5 times!
嘿嘿,让大家见笑了。^_^

-------------
乾坤一笑 写于2006年03月16日  转载请标明出处和原文链接 
--------------------next---------------------

阅读(508) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~