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

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

12 回答 12

This answer is useful

131

您可以使用以下技术:

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

这将在 Visual Studio 上打印"====="

It works for me,没有理由它不应该在所有 C 编译器上工作。

于 2013-04-30T12:25:31.440 回答

This answer is useful

68

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

您可以使用printf的 %* 形式,它接受可变宽度。并且,如果您使用 '0' 作为您的打印值,并结合在左侧填充零的右对齐文本..

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

产生:

00000000000000000000

我把舌头牢牢地放在脸颊上,提供了这个恐怖秀的小代码片段。

有时候,你只需要做坏事来记住为什么你在剩下的时间里那么努力。

#include

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;

}

于 2013-05-23T12:08:49.333 回答

This answer is useful

31

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

对于空间:

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

对于零:

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

于 2015-08-11T06:46:46.050 回答

This answer is useful

19

在 c++ 中,您可以使用 std::string 来获取重复字符

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

例如:

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

输出:

aaaaa

于 2013-05-15T05:21:22.733 回答

This answer is useful

14

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

于 2013-02-04T00:26:17.590 回答

This answer is useful

9

printf不这样做 - 并且printf对于打印单个字符来说太过分了。

char c = '*';

int count = 42;

for (i = 0; i < count; i ++) {

putchar(c);

}

不用担心效率低下;putchar()缓冲其输出,因此除非需要,否则它不会对每个字符执行物理输出操作。

于 2013-02-04T00:53:38.860 回答

This answer is useful

7

如果您有一个支持 alloca() 函数的编译器,那么这是可能的解决方案(虽然很丑):

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

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

如果您有 C99 编译器,那么这可能是一个更简洁的解决方案:

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

于 2013-12-24T17:54:14.217 回答

This answer is useful

4

#include

#include

void repeat_char(unsigned int cnt, char ch) {

char buffer[cnt + 1];

/*assuming you want to repeat the c character 30 times*/

memset(buffer,ch,cnd); buffer[cnt]='\0';

printf("%s",buffer)

}

于 2014-11-21T01:40:54.073 回答

This answer is useful

3

你可以制作一个功能来完成这项工作并使用它

#include

void repeat (char input , int count )

{

for (int i=0; i != count; i++ )

{

printf("%c", input);

}

}

int main()

{

repeat ('#', 5);

return 0;

}

这将输出

#####

于 2015-09-18T12:53:15.207 回答

This answer is useful

2

char buffer[41];

memset(buffer, '-', 40); // initialize all with the '-' character

buffer[40] = 0; // put a NULL at the end

printf("%s\n", buffer); // show 40 dashes

于 2018-02-27T22:27:04.320 回答

This answer is useful

1

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

n<= sizeof(buffer)[ 也可能是 n < 2^16]

但是,优化器可能会将其更改为puts(buffer),然后缺少 EoS 将......

并且假设 memset 是一个汇编指令(但在芯片上仍然是一个循环)。

严格来说,给定前提条件“无循环”,没有解决方案。

于 2014-04-27T16:26:28.637 回答

This answer is useful

-2

我认为做一些这样的。

void printchar(char c, int n){

int i;

for(i=0;i

print("%c",c);

}

printchar("*",10);

于 2013-02-04T00:50:52.790 回答

相关作品

世界杯奖杯里面有多少黄金? 365bet娱乐投注

世界杯奖杯里面有多少黄金?

❤️ 860 📅 09-06
英语钱计量单位大全如:m , b 365bet特点

英语钱计量单位大全如:m , b

❤️ 469 📅 09-19