소ê°� ¶
puts를 통해 글ì�„ ì°�는 방법ì�„ ë°°ì› ê³ fputs, putchar, _fcvt등ì—� 대해서 알게 ë�˜ì—ˆë‹¤. 코드가 ì§€ì ¸ë¶„í•˜ê²Œ 만들어졌지만 앞ì�˜ 내용과
약간ì�˜ C++ 공부했ë�˜ 기억ì�„ ë�˜ì‚´ë¦¬ë©´ 목ì �ì�„ 달성하는ë�°ëŠ” ë§Žì�€ ì–´ë ¤ì›€ì�€ 없었다.
그러나 코드가 깔�하지 못해 아쉽다.
약간ì�˜ C++ 공부했ë�˜ 기억ì�„ ë�˜ì‚´ë¦¬ë©´ 목ì �ì�„ 달성하는ë�°ëŠ” ë§Žì�€ ì–´ë ¤ì›€ì�€ 없었다.
그러나 코드가 깔�하지 못해 아쉽다.
코드 ¶
~cpp
#include <iostream>
#include <stdarg.h>
#include <stdlib.h>
using namespace std;
int decimal, sign;
#define limit 5
#define IntSize 12
void print(char *n, ...)
{
va_list l;
va_start(l,n);
while(*n)
{
if(*n=='%')
{
n++;
if(isdigit(*n))
{
char number = *n;
n++;
if(*n=='d')
{
char st[IntSize];
itoa(va_arg(l,int), st, 10);
if((number-48)>strlen(st))
for(int i=0; i<(number-48-strlen(st)); i++)
putchar(' ');
fputs(st, stdout);
}
else if(*n=='s')
fputs(va_arg(l,char*), stdout);
else if(*n=='f')
{
char *st=_fcvt(va_arg(l,double), limit, &decimal, &sign);
if(sign==1)
putchar('-');
for(int k=decimal+limit; k>=0; k--)
{
if(decimal==0)
putchar('.');
else
putchar(*(st++));
decimal--;
}
}
else
{
putchar('%');
putchar(number);
putchar(*n);
}
n++;
}
else
{
if(*n=='d')
{
char st[IntSize];
itoa(va_arg(l,int), st, 10);
fputs(st, stdout);
}
else if(*n=='s')
fputs(va_arg(l,char*), stdout);
else if(*n=='f')
{
char *st=_fcvt(va_arg(l,double), limit, &decimal, &sign);
if(sign==1)
putchar('-');
for(int k=decimal+limit; k>=0; k--)
{
if(decimal==0)
putchar('.');
else
putchar(*(st++));
decimal--;
}
}
else
{
putchar('%');
putchar(*n);
}
n++;
}
}
else if(*n=='@')
{
n++;
if(*n=='d')
{
int *number = va_arg(l,int*);
int count = va_arg(l, int);
putchar('{');
for(int i=0; i<count; i++)
{
char st[IntSize];
itoa(number[i], st, 10);
fputs(st, stdout);
if(i!=(count-1))
putchar(',');
}
putchar('}');
}
else if(*n=='s')
{
char **ch= va_arg(l,char**);
int count = va_arg(l, int);
putchar('{');
for(int i=0; i<count; i++)
{
fputs(ch[i], stdout);
if(i!=(count-1))
putchar(',');
}
putchar('}');
}
else if(*n=='f')
{
double *number = va_arg(l, double*);
int count = va_arg(l, int);
putchar('{');
for(int i=0; i<count; i++)
{
char *st=_fcvt(number[i], limit, &decimal, &sign);
if(sign==1)
putchar('-');
for(int k=decimal+limit; k>=0; k--)
{
if(decimal==0)
putchar('.');
else
putchar(*(st++));
decimal--;
}
if(i!=(count-1))
putchar(',');
}
putchar('}');
}
else
{
putchar('@');
putchar(*n);
}
n++;
}
else
putchar(*(n++));
}
}
int main()
{
int d=1234;
double f=-2.12321;
char *s="String";
print("ì •ìˆ˜ : %d, 실수 : %f, 문ìž�ì—´ : %s\n", d, f, s);
int a[3] = { 1, 2, 3 };
char *b[2] = { "abc", "def" };
double c[2] = { -1.22342, 43.232 };
print("array: @d\n", a, 3);
print("array: @s\n", b, 2);
print("array: @f\n", c, 2);
int n1 = 123;
int n2 = 12345;
int n3 = 12345678;
print("number: %7d\n", n1);
print("number: %7d\n", n2);
print("number: %7d\n", n3);
return 0;
}
----
헉!기웅아..
내가 위키 사용법� 잘 몰�서 올리는 법좀 붙여쓰기해서 사용했�니..
니꺼 다 ë‚ ë�¼ê°”다...-..ã…¡;;
미안.... ^^;;
OurMajorLangIsCAndCPlusPlus/print
헉!기웅아..
내가 위키 사용법� 잘 몰�서 올리는 법좀 붙여쓰기해서 사용했�니..
니꺼 다 ë‚ ë�¼ê°”다...-..ã…¡;;
미안.... ^^;;
- 허준수 -
- 위키ì�˜ 메뉴중 '과거'를 누르면 과거ì�˜ ìƒ�태를 보거나 ë³µêµ¬í• ìˆ˜ 있습니다. ì œê°€ 복구했습니다.^^ - 조현태
- ë‚´ê°€ 다시 ì˜¬ë ¤ë†¨ì‚¼~ 중간ì—� 없어진게 좀 있어서~ - 하기웅
----
- 위키ì�˜ 메뉴중 '과거'를 누르면 과거ì�˜ ìƒ�태를 보거나 ë³µêµ¬í• ìˆ˜ 있습니다. ì œê°€ 복구했습니다.^^ - 조현태
- ë‚´ê°€ 다시 ì˜¬ë ¤ë†¨ì‚¼~ 중간ì—� 없어진게 좀 있어서~ - 하기웅
OurMajorLangIsCAndCPlusPlus/print










