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

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

Что правильная строка формата должна выполнить это?

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

62
задан 4 February 2013 в 05:41

12 ответов

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

можно использовать % * форма 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;
}
50
ответ дан 31 October 2019 в 13:09

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

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

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

Для нулей:

printf("%0*d", count, 0);
16
ответ дан 31 October 2019 в 13:09

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

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

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

100
ответ дан 31 October 2019 в 13:09

В C++ Вы могли использовать станд.:: строка для получения повторенного символа

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

, Например:

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

вывод:

aaaaa
15
ответ дан 31 October 2019 в 13:09

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

11
ответ дан 31 October 2019 в 13:09

printf не делает, это - и printf является излишеством для печати отдельного символа.

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

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

7
ответ дан 31 October 2019 в 13:09

Если у Вас есть компилятор, который поддерживает 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'));
6
ответ дан 31 October 2019 в 13:09

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

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

, Это произведет

#####
2
ответ дан 31 October 2019 в 13:09
#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)
}
4
ответ дан 31 October 2019 в 13:09
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 />
0
ответ дан 31 October 2019 в 13:09
printf("%.*s\n",n,(char *) memset(buffer,c,n));

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

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

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

Строго замеченный нет никакого решения, учитывая Вас предварительного условия 'Никакой цикл'.

1
ответ дан 31 October 2019 в 13:09

я думаю, делая некоторых, любят это.

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

printchar("*",10);
-1
ответ дан 31 October 2019 в 13:09

Другие вопросы по тегам:

Похожие вопросы: