Подтвердить что ты не робот

Как повторить char с помощью printf?

Я хотел бы сделать что-то вроде printf("?", count, char), чтобы повторить символ count раз.

Какая правильная строка формата подходит для этого?

EDIT: Да, очевидно, что я мог бы вызывать printf() в цикле, но это именно то, чего я хотел избежать.

4b9b3361

Ответ 1

Короткий ответ - да, длинный ответ: не так, как вы этого хотите.

Вы можете использовать форму% * 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;
}

Ответ 2

Вы можете использовать следующую технику:

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

Откроется "=====" Он работает для меня на Visual Studio, поэтому он не должен работать на всех компиляторах C.

Ответ 3

В С++ вы можете использовать std::string для получения повторяющегося символа

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

Например:

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

выход:

aaaaa

Ответ 4

Если вы ограничиваете себя повторением либо 0, либо пробела, которое вы можете сделать:

Для пробелов:

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

Для нулей:

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

Ответ 5

Нет такой вещи. Вам нужно либо написать цикл с помощью printf, либо puts, либо написать функцию, которая копирует количество строк в новую строку.

Ответ 6

Если у вас есть компилятор, который поддерживает функцию 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'));

Ответ 7

printf этого не делает - и printf переполняется для печати одного символа.

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

Не беспокойтесь, что это неэффективно; putchar() буферизует свой вывод, поэтому он не будет выполнять физическую операцию вывода для каждого символа, если это не нужно.

Ответ 8

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

Ответ 9

вы можете создать функцию, выполняющую эту работу, и использовать ее

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

Это приведет к выводу

#####

Ответ 10

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

n <= sizeof(buffer) [возможно, также n < 2 ^ 16]

Однако оптимизатор может изменить его на puts(buffer), а затем отсутствие EoS будет.....

И предполагается, что memset является инструкцией ассемблера (но все же цикл чип).

Строго видно, что нет решения, если вы предустановили "Нет цикла".

Ответ 11

Это не общее решение, но если вам нужно напечатать указанное количество пробельных символов, вы можете сделать следующее.

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

Ответ 12

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 />

Ответ 13

Я думаю, что мне это нравится.

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

printchar("*",10);