C_and_CPP 板


LINE

问题(Question): 这是在https://openhome.cc/Gossip/AlgorithmGossip/PascalTriangle.htm看到的题目 ,是关於巴斯卡三角形的运算并排列。里面的程式码大部分小弟都看得懂,但在sprintf 里有一个%%%ds的格式化符号实在是不懂它的功能,以前也没看过这样子的打法;还请版 上高手能替小弟解答,感激不尽。 程式码(Code): #include <stdio.h> #define HEIGHT 12 int combi(int r, int n){ int p = 1; int i; for(i = 1; i <= n; i++) { p = p * (r - i + 1) / i; } return p; } int main() { int r; for(r = 0; r < HEIGHT; r++) { char format[5]; sprintf(format, "%%%ds", (HEIGHT - r) * 3); printf(format); int n; for(n = 0; n <= r; n++) { printf("%6d", combi(r, n)); } printf("\n"); } return 0; } --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 163.18.30.156
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1491570871.A.B17.html
1F:推 x000032001: %%印出% %d出整数 s就是s 04/07 21:16
2F:→ x000032001: 跟下面那行一起看就是印出(HEIGHT-r)*3个空白 04/07 21:20
3F:→ Ayuang: x000032001 所以%s不给变数的话就会输出空白吗? 04/07 21:31
4F:推 LPH66: 唔嗯...我感觉印空白是 UB, 至少也要摆个 "" 04/07 22:45
5F:→ LPH66: 查了一下没错, va_arg 在没参数时硬叫是未定义行为 04/07 22:50
6F:→ x000032001: 原文好像有"" … 04/07 22:50
7F:→ LPH66: 所以正确的写法应该是 printf(format,""); 04/07 22:50
8F:→ LPH66: 不过这里其实可以不用这麽间接的方式 04/07 22:51
9F:→ LPH66: printf 系的格式字串可以在需要数字时放 * 字 04/07 22:51
10F:→ LPH66: 这个 * 字实际上是多少由下一个 int 决定 04/07 22:51
11F:→ LPH66: 所以这里可以写 printf("%*s",(HEIGHT-r)*3,""); 04/07 22:52
12F:→ LPH66: 达到一样的效果 04/07 22:52
13F:→ Ayuang: LPH66 我刚刚有是过去掉print里的" ",效果一样 04/07 23:17
14F:→ Ayuang: 还是很谢谢两位为我解答,这打法真的很有意思。 04/07 23:19
15F:推 ilikekotomi: 长知识了 以前都没注意到有%*s的用法 感谢LPH66大大 04/07 23:47
16F:推 CoNsTaR: %%%%%% 04/08 05:05
17F:推 dmeiki: 长知识 04/08 23:43
18F:推 Hazukashiine: %.*s 有一个点 04/09 03:32
19F:推 EdisonX: 可以不用%.*s , 那个 dot 多用在浮点数,如 %*.*lf 04/09 11:42
20F:→ Hazukashiine: http://i.imgur.com/nkeukQ2.jpg 04/09 12:18
21F:→ Hazukashiine: 有那个的点点才能 truncate 所以 〃*.*s〃 也是对的 04/09 12:26
22F:→ Hazukashiine: http://i.imgur.com/0vsxxk9.png 04/09 13:20
23F:→ Ayuang: 可以参考这篇文章,写得很详细http://curryworld.ga/archi 04/09 20:50
24F:推 EdisonX: 这招到还没用过,谢谢。 04/09 20:51
25F:→ Ayuang: http://curryworld.ga/archives/330 04/09 20:51
26F:推 LPH66: 嗯, 上面推文没提 . 是因为原文写法就不是用 . 的 04/10 02:43
27F:→ LPH66: * 字可以取代数字所以 %*.*s 这个写法可以直接定死输出长度 04/10 02:44
28F:→ LPH66: 不论实际上的字串有多长; 原文只是要印空白所以不用 . 04/10 02:44







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP