printf를 사용하여 문자를 반복하는 방법
뭔가 하고 싶은 게 있는데printf("?", count, char)
글자를 되풀이하다count
시대.
이를 실현하기 위한 올바른 format-string은 무엇입니까?
편집: 네, 분명히 전화할 수 있습니다.printf()
하지만 그게 바로 내가 피하고 싶었던 거야
다음 기술을 사용할 수 있습니다.
printf("%.*s", 5, "=================");
이것은 인쇄됩니다."====="
Visual Studio에서는 동작합니다.모든 C 컴파일러에서 동작하지 않을 이유가 없습니다.
간단한 답변 - 네, 긴 답변: 당신이 원하는 방식이 아닙니다.
가변 너비를 사용할 수 있는 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, "");
0의 경우:
printf("%0*d", count, 0);
그런 건 없어요.루프를 작성해야 합니다.printf
또는puts
또는 문자열 카운트 횟수를 새 문자열로 복사하는 함수를 작성합니다.
c++에서는 std::string을 사용하여 반복 문자를 가져올 수 있습니다.
printf("%s",std::string(count,char).c_str());
예를 들어 다음과 같습니다.
printf("%s",std::string(5,'a').c_str());
출력:
aaaaa
printf
그렇게 하지 않습니다.printf
한 글자를 인쇄하는 건 과잉 살상이야
char c = '*';
int count = 42;
for (i = 0; i < count; i ++) {
putchar(c);
}
이것이 비효율적이라고 걱정하지 마세요.putchar()
는 출력을 버퍼링하기 때문에 필요한 경우를 제외하고 각 문자에 대해 물리적인 출력 조작을 실행하지 않습니다.
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 />
이 작업을 수행하는 기능을 만들어 사용할 수 있습니다.
#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;
}
이렇게 하면 출력됩니다.
#####
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>
#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)
}
이런 거 하는 것 같아요.
void printchar(char c, int n){
int i;
for(i=0;i<n;i++)
print("%c",c);
}
printchar("*",10);
printf("%.*s\n",n,(char *) memset(buffer,c,n));
n
<=>sizeof(buffer)
[n < 2^16 ]도 있을 수 있습니다]
단, 옵티마이저는 다음과 같이 변경할 수 있습니다.puts(buffer)
EoS가 부족하면...
또한 memset은 어셈블러 명령이라고 가정합니다(단, 루프 온 칩).
'No loop'이라는 전제조건이 주어지면 해결방법이 없다는 것을 엄밀히 알 수 있다.
언급URL : https://stackoverflow.com/questions/14678948/how-to-repeat-a-char-using-printf
'programing' 카테고리의 다른 글
인접 인터페이스의 Java 스위치가 케이스가 추가되면 더 빨리 동작하는 것처럼 보이는 이유는 무엇입니까? (0) | 2022.08.15 |
---|---|
파이어폭스에서 Vuejs 이벤트가 작동하지 않음 - Chrome에서는 정상 (0) | 2022.08.15 |
RegisterServiceWorker.js에서 Vue 앱 $refs.components 또는 Vuex $store 메서드를 호출하는 방법 (0) | 2022.08.14 |
JAX-RS - JSON 및 HTTP 상태 코드를 함께 반환하려면 어떻게 해야 합니까? (0) | 2022.08.14 |
Java 코드에서 UML 다이어그램(특히 시퀀스 다이어그램)을 생성하려면 어떻게 해야 합니까? (0) | 2022.08.14 |