我想做一些printf("?", count, char)
重复角色count
时间的事情。
什么是完成此操作的正确格式字符串?
编辑:是的,很明显,我可以printf()
循环调用,但这就是我想要避免的事情。
我想做一些printf("?", count, char)
重复角色count
时间的事情。
什么是完成此操作的正确格式字符串?
编辑:是的,很明显,我可以printf()
循环调用,但这就是我想要避免的事情。
printf
格式可以满足您的要求),但是您的评论使我不确定您要问什么。您谈论的是格式字符串和传递给函数的参数。您要问什么功能?似乎有些事情您没有告诉我们。
Answers:
简短答案-是,长答案:不是您想要的。
您可以使用%*形式的printf,它接受可变的宽度。而且,如果您使用“ 0”作为要打印的值,请结合使用左对齐零填充的右对齐文本。
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;
}
4096
。我想您可以malloc
缓冲一下。
您可以使用以下技术:
printf("%.*s", 5, "=================");
它将打印出来。"====="
它在Visual Studio上对我有用,没有理由在所有C编译器上都不起作用。
哪有这回事。您必须使用printf
或编写一个循环puts
,或者编写一个将字符串计数时间复制到新字符串中的函数。
printf
不会这样做-并且printf
对于打印单个字符来说过于刻板。
char c = '*';
int count = 42;
for (i = 0; i < count; i ++) {
putchar(c);
}
不必担心这种效率低下的问题。putchar()
缓冲其输出,因此除非需要,否则不会为每个字符执行物理输出操作。
printf
,格式字符串为"%c"
。但是您不需要使用printf
,在这种情况下,您根本不需要格式字符串。(根本没有printf
格式字符串可以多次打印字符,但是还有其他更好的方法可以完成此任务。)
如果您有一个支持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'));
putchar('x')
而不是printf("%c", 'x')
。
#include <stdio.h>
#include <string.h>
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)
}
您可以创建一个函数来完成这项工作并使用它
#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;
}
这将输出
#####
i < count
。否则,计数的负输入可能会导致大量不必要的打印。