如何使用printf重复一个字符?

我想要做一些像printf("?", count, char)重复一个字符count次。

什么是正确的格式string来完成这个?

编辑:是的,很明显,我可以在循环中调用printf() ,但这正是我想要避免的。

简短的回答 – 是的,长的回答:不是你想要的。

你可以使用printf的%*forms,它接受一个可变的宽度。 而且,如果您使用“0”作为要打印的值, 并结合左侧填充零的右alignment文本。

 printf("%0*d\n", 20, 0); 

生产:

 00000000000000000000 

用我的舌头牢牢地植在我的脸颊,我提供了这个小小的恐怖片段的代码。

有些时候,你必须做得很糟糕才能记住为什么你在其他时间如此努力。

 #include <stdio.h> int width = 20; char buf[4096]; void subst(char *s, char from, char to) { while (*s == from) *s++ = to; } int main() { sprintf(buf, "%0*d", width, 0); subst(buf, '0', '-'); printf("%s\n", buf); return 0; } 

您可以使用以下技术:

 printf("%.*s", 5, "================="); 

这将打印"====="它适用于我在Visual Studio上,没有理由不适用于所有的C编译器。

在c ++中,你可以使用std :: string来获得重复的字符

 printf("%s",std::string(count,char).c_str()); 

例如:

 printf("%s",std::string(5,'a').c_str()); 

输出:

 aaaaa 

哪有这回事。 您必须使用printfputs写一个循环,或者编写一个函数将string计数次数复制到一个新的string中。

如果你有一个支持alloca()函数的编译器,那么这是可能的解决scheme(虽然相当丑陋):

 printf("%s", (char*)memset(memset(alloca(10), '\0', 10), 'x', 9)); 

它基本上在堆栈中分配了10个字节,这些字节用'\ 0'填充,然后前9个字节用'x'填充。

如果你有一个C99编译器,那么这可能是一个更好的解决scheme:

 for (int i = 0; i < 10; i++, printf("%c", 'x')); 

如果你限制自己重复0或者空格,你可以这样做:

对于空间:

 printf("%*s", count, ""); 

对于零:

 printf("%0*d", count, 0); 

printf不会这么做 – 而printf对于打印单个字符来说是过分的。

 char c = '*'; int count = 42; for (i = 0; i < count; i ++) { putchar(c); } 

不要担心这是低效的; putchar()缓冲它的输出,所以它不会为每个字符执行物理输出操作,除非需要。

你可以做一个这个工作并使用它的函数

 #include <stdio.h> void repeat (char input , int count ) { for (int i=0; i != count; i++ ) { printf("%c", input); } } int main() { repeat ('#', 5); return 0; } 

这将输出

 ##### 
 printf("%.*s\n",n,(char *) memset(buffer,c,n)); 

n <= sizeof(buffer) [也许n <2 ^ 16]

然而,优化器可能会改变它puts(buffer) ,然后缺乏EoS会…..

而且,memset是一个汇编指令(但它仍然是一个循环)。

严格看来,没有任何解决scheme给予你的先决条件“无循环”。

 char buffer[31]; /*assuming you want to repeat the c character 30 times*/ memset(buffer,(int)'c',30); buffer[30]='\0'; printf("%s",buffer) 

这不是一个通用的解决scheme,但是如果您需要打印指定数量的空白字符,则可以执行以下操作。

 printf("%*.0i", count, 0); 

我想这样做。

 void printchar(char c, int n){ int i; for(i=0;i<n;i++) print("%c",c); } printchar("*",10);