Как повторить символ с использованием printf?

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

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

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

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

Вы можете использовать форму% * printf , которая принимает переменную ширину. И, если вы используете «0» в качестве значения для печати, в сочетании с выровненным справа текстом, который имеет нулевое значение слева.

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

производит:

 00000000000000000000 

Когда мой язык прочно посадил меня в щеку, я предлагаю этот небольшой fragment кода ужасов.

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

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

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

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

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

В c ++ вы можете использовать std :: string, чтобы получить повторяющийся символ

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

Например:

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

вывод:

 aaaaa 

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

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

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

Для нhive:

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

Такого нет. Вам придется либо написать цикл, используя printf либо puts , либо написать функцию, которая копирует количество строк в новую строку.

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

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

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

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

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

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

 #include  void repeat (char input , int count ) { for (int i=0; i != count; i++ ) { printf("%c", input); } } int main() { repeat ('#', 5); return 0; } 

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

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

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

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

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

Строго видно, что нет решения, если вы предпочтете «No loop».

 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

я думаю, что делать что-то подобное.

 void printchar(char c, int n){ int i; for(i=0;i 
  • Разница между fprintf, printf и sprintf?
  • Заполнение символов в printf
  • Почему printf () продвигает float в double?
  • «Escape-space» escape-символ «\ b»: неожиданное поведение?
  • Есть ли веская причина использовать «printf» вместо «print» в java?
  • printf с «% d» чисел, начиная с 0 (ex «0102»), давая неожиданный ответ (например, «66»)
  • Печать символов и их ASCII-код в C
  • Что означает «%. * S» в printf?
  • Что происходит с «% n» Java в printf?
  • Каков аргумент для printf, который форматирует длинные?
  • В чем разница между спецификаторами преобразования% i и% d в форматированных IO-функциях (* printf / * scanf)
  • Interesting Posts

    Как я могу определить, будет ли какой-то жесткий диск соответствовать моей хромовой книге?

    Как автоматическое изменение размера и настройка элементов управления формы с изменением разрешения

    Ошибка при преобразовании в COFF: файл недействителен или поврежден

    Языковые ограничения для Android Lint для проверки отсутствующих переводов

    Предотrotation наследования classов в C ++

    Как полностью удалить диалоговое окно закрытия

    Ошибка сегментации при изменении строки с помощью указателей?

    Почему мой размер текста настолько мал после изменения моего увеличения экрана до 125% и обратно?

    Разбор строки JSON в Java

    как преобразовать data.frame в транзакции для arules

    Отключите активацию панели меню, когда Alt нажата в Windows 7

    Объединить несколько дочерних строк в одну строку MYSQL

    Использование PDF MetaData для переименования PDF-файлов в MAC OS X

    Как копировать файлы с Google Cloud Compute Server на локальную машину

    Разрешение перегрузки между объектом, ссылкой rvalue, константой ссылки

    Давайте будем гением компьютера.