How to repeat a char using printf?

CPrintf

C Problem Overview


I'd like to do something like printf("?", count, char) to repeat a character count times.

What is the right format-string to accomplish this?

EDIT: Yes, it is obvious that I could call printf() in a loop, but that is just what I wanted to avoid.

C Solutions


Solution 1 - C

You can use the following technique:

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

This will print "=====" It works for me on Visual Studio, no reason it shouldn't work on all C compilers.

Solution 2 - C

Short answer - yes, long answer: not how you want it.

You can use the %* form of printf, which accepts a variable width. And, if you use '0' as your value to print, combined with the right-aligned text that's zero padded on the left..

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

produces:

00000000000000000000

With my tongue firmly planted in my cheek, I offer up this little horror-show snippet of code.

Some times you just gotta do things badly to remember why you try so hard the rest of the time.

#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;
}

Solution 3 - C

If you limit yourself to repeating either a 0 or a space you can do:

For spaces:

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

For zeros:

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

Solution 4 - C

In c++ you could use std::string to get repeated character

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

For example:

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

output:

aaaaa

Solution 5 - C

There is no such thing. You'll have to either write a loop using printf or puts, or write a function that copies the string count times into a new string.

Solution 6 - C

printf doesn't do that -- and printf is overkill for printing a single character.

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

Don't worry about this being inefficient; putchar() buffers its output, so it won't perform a physical output operation for each character unless it needs to.

Solution 7 - C

If you have a compiler that supports the alloca() function, then this is possible solution (quite ugly though):

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

It basically allocates 10 bytes on the stack which are filled with '\0' and then the first 9 bytes are filled with 'x'.

If you have a C99 compiler, then this might be a neater solution:

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

Solution 8 - C

#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)
}

Solution 9 - C

you can make a function that do this job and use it

#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;
}

This will output

#####

Solution 10 - C

char buffer[41];

memset(buffer, '-', 40);    // initialize all with the '-' character<br /><br />
buffer[40] = 0;             // put a NULL at the end<br />

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

Solution 11 - C

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

n <= sizeof(buffer) [ maybe also n < 2^16]

However the optimizer may change it to puts(buffer) and then the lack of EoS will .....

And the assumption is that memset is an assembler instruction (but still a loop be it on chip).

Strictly seen there is no solution given you precondition 'No loop'.

Solution 12 - C

i think doing some like this.

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

printchar("*",10);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMaestroView Question on Stackoverflow
Solution 1 - Crep_movsdView Answer on Stackoverflow
Solution 2 - CsynthesizerpatelView Answer on Stackoverflow
Solution 3 - CArielView Answer on Stackoverflow
Solution 4 - CKristian GregersenView Answer on Stackoverflow
Solution 5 - CMats PeterssonView Answer on Stackoverflow
Solution 6 - CKeith ThompsonView Answer on Stackoverflow
Solution 7 - CramonView Answer on Stackoverflow
Solution 8 - CPavlos FragkiadoulakisView Answer on Stackoverflow
Solution 9 - CLoayHView Answer on Stackoverflow
Solution 10 - CCharlesView Answer on Stackoverflow
Solution 11 - CReneView Answer on Stackoverflow
Solution 12 - ClindosekaiView Answer on Stackoverflow