Я хотел бы сделать что-то как printf("?", count, char)
повторить символ count
времена.
Что правильная строка формата должна выполнить это?
Править: Да, очевидно, что я мог звонить printf()
в цикле, но это, чего я хотел избежать.
Короткий ответ - да, длинный ответ: не, как Вы хотите это.
можно использовать % * форма 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;
}
При ограничении себя повторением или 0 или пространство, можно сделать:
Для пробелов:
printf("%*s", count, "");
Для нулей:
printf("%0*d", count, 0);
Можно использовать следующую технику:
printf("%.*s", 5, "=================");
Это распечатает "====="
, Это работает на меня на Visual Studio, никакая причина, это не должно работать над всеми компиляторами C.
В C++ Вы могли использовать станд.:: строка для получения повторенного символа
printf("%s",std::string(count,char).c_str());
, Например:
printf("%s",std::string(5,'a').c_str());
вывод:
aaaaa
Нет такой вещи. Необходимо будет или записать цикл с помощью printf
или puts
или записать функцию, которая копирует строковые времена количества в новую строку.
printf
не делает, это - и printf
является излишеством для печати отдельного символа.
char c = '*';
int count = 42;
for (i = 0; i < count; i ++) {
putchar(c);
}
не волнуются об этом являющемся неэффективным; putchar()
буферы его вывод, таким образом, это не выполнит физическую выходную операцию для каждого символа, если это не должно будет.
Если у Вас есть компилятор, который поддерживает 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'));
можно сделать функцию, которые делают это задание и используют его
#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;
}
, Это произведет
#####
#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)
}
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 />
printf("%.*s\n",n,(char *) memset(buffer,c,n));
n
< = sizeof(buffer)
[возможно, также n < 2^16]
Однако оптимизатор может изменить его на puts(buffer)
, и затем отсутствие ЭОС будет.....
И предположение то, что memset является ассемблерной инструкцией (но все еще цикл быть им на микросхеме).
Строго замеченный нет никакого решения, учитывая Вас предварительного условия 'Никакой цикл'.
я думаю, делая некоторых, любят это.
void printchar(char c, int n){
int i;
for(i=0;i<n;i++)
print("%c",c);
}
printchar("*",10);