如何使用格式说明符重复打印数字或字符?以printf输出----5为例
嘿,这两个问题都挺实用的,我来给你唠清楚~
一、如何用格式说明符打印数字或字符的多个实例
打印多个相同字符
如果你想快速输出N个一模一样的字符,比如5个*或者-,有两种省心的方法:
- 字符串截取法:用
printf("%.*s", 重复次数, "足够长的目标字符串")就能搞定。比如要打5个-,就这么写:
原理很简单:printf("%.*s", 5, "---------------------"); // 输出:-----%.*s里的*是用来动态指定打印长度的,后面的数字就是你要的重复次数,只要后面的字符串长度比这个数字大就行,随便写一串够长的目标字符就ok。 - 循环配合单字符打印:如果重复次数不确定(比如由变量决定),用循环+
printf("%c", 目标字符)也很顺手,比如:int count = 6; for(int i=0; i<count; i++) printf("%c", '*'); // 输出:******
打印多个相同数字实例
重复打印数字的思路差不多:
- 直接重复格式符:如果次数少,直接写多个
%d就行,比如打印3次数字7:printf("%d%d%d", 7, 7, 7); // 输出:777 - 循环打印:次数多的话,用循环每次输出一个数字就好,比如:
int count = 4; for(int i=0; i<count; i++) printf("%d", 9); // 输出:9999
二、能不能把
printf("%05d",5)的输出从00005改成----5? 很遗憾,咱们常用的标准C里的printf格式说明符没办法直接把填充字符改成-——默认情况下,整数格式的填充字符只有两种:加0标志(比如%05d)时填充0,不加的话就填充空格(比如%5d会输出 5)。
不过没关系,我们可以用其他方法达到想要的效果,这里有两个简单的方案:
拆分打印法:先打印需要的
-,再打印数字。比如要总宽度是5,数字占1位,那先打印4个-,再输出5就行:printf("%.*s%d", 4, "----", 5); // 输出:----5这里还是用到了前面的
%.*s来控制-的数量,刚好凑够5位宽度。先格式化再替换:如果需要更灵活的处理(比如数字长度不确定),可以先把数字格式化成带空格的字符串,再把空格替换成
-,比如:char buf[10]; sprintf(buf, "%5d", 5); // 此时buf里是" 5" // 把空格换成'-' for(int i=0; buf[i]!='\0'; i++){ if(buf[i] == ' ') buf[i] = '-'; } printf("%s", buf); // 输出:----5
内容的提问来源于stack exchange,提问作者user648933
相关产品推荐
相关产品推荐

