printf("?", count, char)
캐릭터 count
시간 을 반복하는 것과 같은 것을하고 싶습니다 .
이를 수행하기위한 올바른 형식 문자열은 무엇입니까?
편집 : 예, printf()
루프에서 호출 할 수 있다는 것이 분명 하지만 피하고 싶었던 것입니다.
답변
짧은 답변-예, 긴 답변 : 원하는 방식이 아닙니다.
가변 너비를 허용하는 printf 의 % * 형식을 사용할 수 있습니다 . 그리고 인쇄 할 값으로 ‘0’을 사용 하면 왼쪽이 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;
}
답변
다음 기술을 사용할 수 있습니다.
printf("%.*s", 5, "=================");
이것은 "====="
Visual Studio에서 나를 위해 작동하며 모든 C 컴파일러에서 작동하지 않아야 할 이유가 없습니다.
답변
0 또는 공백을 반복하도록 제한하는 경우 다음을 수행 할 수 있습니다.
공백의 경우 :
printf("%*s", count, "");
0의 경우 :
printf("%0*d", count, 0);
답변
C ++에서는 std :: string을 사용하여 반복되는 문자를 얻을 수 있습니다.
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));
기본적으로 ‘\ 0’으로 채워진 스택에 10 바이트를 할당하고 처음 9 바이트는 ‘x’로 채워집니다.
C99 컴파일러가있는 경우 다음은 더 깔끔한 솔루션 일 수 있습니다.
for (int i = 0; i < 10; i++, printf("%c", 'x'));