printf를 사용하여 문자를 반복하는 방법은 무엇입니까?
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'));
#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)
}
이 작업을 수행하는 기능을 만들고 사용할 수 있습니다.
#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;
}
이것은 출력됩니다
#####
printf("%.*s\n",n,(char *) memset(buffer,c,n));
n
<= sizeof(buffer)
[어쩌면 n <2 ^ 16]
그러나 옵티마이 저는이를로 변경할 수 puts(buffer)
있으며 EoS 부족은 .....
그리고 가정은 memset이 어셈블러 명령어라는 것입니다 (하지만 여전히 루프는 칩에 있습니다).
전제 조건 '루프 없음'이 주어지면 해결책이 없습니다.
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 />
이런 식으로하는 것 같아요.
void printchar(char c, int n){
int i;
for(i=0;i<n;i++)
print("%c",c);
}
printchar("*",10);
참고 URL : https://stackoverflow.com/questions/14678948/how-to-repeat-a-char-using-printf
'UFO ET IT' 카테고리의 다른 글
루프가있는 증가 카운터 (0) | 2020.11.25 |
---|---|
RGB 값에서 UIColor를 올바르게 초기화하는 방법은 무엇입니까? (0) | 2020.11.25 |
우분투 14.04에 최신 nodejs 버전 설치 (0) | 2020.11.25 |
Android-세로 레이아웃 만 (0) | 2020.11.25 |
부모의 높이와 피팅 너비를 조정하는 Android ImageView (0) | 2020.11.25 |