| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1356 人关注过本帖
标题:新手八进制输出小问题
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
你用的什么编程环境?想要学得好,就使用一个齐全的环境,连帮助系统都能省掉,装来干什么。没任何老师比帮助更好的。

类似下面的表,在百度上搜一下,用笔记本抄下来,随时查阅,没有理由可讲的,printf()函数的设计就是那样,不是C语言的规定:
图片附件: 游客没有浏览图片的权限,请 登录注册


百度也帮你做了:http://baike.baidu.com/view/410546.htm

[ 本帖最后由 TonyDeng 于 2012-7-18 12:43 编辑 ]

授人以渔,不授人以鱼。
2012-07-18 12:39
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
没办法,MSDN就是做得比Java的帮助又全又好用,智能+傻瓜化。呵呵。

我们都在路上。。。。。
2012-07-18 12:41
我勒个擦大叔
Rank: 1
等 级:新手上路
帖 子:8
专家分:3
注 册:2012-7-12
收藏
得分:0 
回复 11楼 TonyDeng
用的VC++6.0.
多谢版主告诉我一个解决问题的方法,虽然英语不是很好,一边翻译一边看吧。。
2012-07-18 12:46
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
送楼主一本C语言参考手册,编程时可随时查看。
CLib_cn.chm (121.95 KB)

我们都在路上。。。。。
2012-07-18 12:47
我勒个擦大叔
Rank: 1
等 级:新手上路
帖 子:8
专家分:3
注 册:2012-7-12
收藏
得分:0 
唉,你晚了一步,不然也给你点分。
2012-07-18 12:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
printf()函数,设计时只认小写o,当它扫描格式字符串"%o\n",发现%o是认识的组合,就能识别为按八进制输出要求,而看到%O,是不认识的,就忽略掉%,直接输出字符,此时后面的参数100是废的,因为它根本没接收到有数据需要输出的指令。当发现%o时,意思是指示printf(),在这个位置应该用后面参数表中的数据来替换%o,完全是一个搜索替换的动作,这就是printf()函数所做的事,是一个函数设计,不是什么C语言的语法。很多人把学C的精力花费在这些地方,是舍本逐末。

授人以渔,不授人以鱼。
2012-07-18 12:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
上面给了你百度的链接,是中文的。

授人以渔,不授人以鱼。
2012-07-18 12:50
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
不用了,多多用分引诱T版,他会告诉你很多你想知道的答案。

我们都在路上。。。。。
2012-07-18 12:53
我勒个擦大叔
Rank: 1
等 级:新手上路
帖 子:8
专家分:3
注 册:2012-7-12
收藏
得分:0 
回复 16楼 TonyDeng
嗯,原来如此。只是《C Primer Plus》书上有一处用了%O,可能是打错了吧,我才去分别试一试大小写,发现十六进制的可以用大写,八进制的不可以。
2012-07-18 12:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
printf()函数的动作是这样的:比如printf("Hello, %o world!\n", 100)这条语句,它首先扫描第一个参数字符串"Hello, %o world!\n",诸如"Hello, world!"这样的字眼是原始文本,是直接输出的,但其中发现了%o这样的约定字眼,表示需要做特殊处理,这样,在这个位置,它就到第二个参数中寻找数据,把数据100按约定转换为八进制表达的字符串"144"(如果它希望找到整数,但你给了它一个浮点数或字符串,它是不懂的,只会死板地当作整数来读取,所以这种情况下编译时是不报错的,但运行结果不对,就是这个道理;有时,它希望有两个数据,但实际上你只给了一个,编译器也同样检查不到。总之,这是与C强类型检查很不相符的解释语言特性。),替换掉前面文本中的%o,于是整个输出就成了"Hello, 144 world!\n"。诸如此类,全部都是做这种动作,这样的函数你可以写,也可以使用自己约定的一套方案,不必死守printf()的,事实上,.NET下的VC语言提供了另外一种替代printf()的输出函数Console.Write(),比printf()好用得多,也清晰得多。

[ 本帖最后由 TonyDeng 于 2012-7-18 13:05 编辑 ]

授人以渔,不授人以鱼。
2012-07-18 12:58
快速回复:新手八进制输出小问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016486 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved