模拟实现printf("hello %s%c %d\n","worl", 'd', 1234);
void PutInt(int num)//整型变量转化为字符输出函数
{
if (num > 9)
{
PutInt(num / 10);//递归实现
}
putchar(num % 10 + '0');
}
int my_printf(const char* format,...)
{
assert(format);
va_list arg;//含义为定义char *arg
va_start(arg, format);//可变参数的初始化
const char* start = format;
while (*start != '\0')//终止条件
{
if (*start == '%')//遇到%说明可能即将遇到输出变量
{
start++;
switch (*start)//辨别变量类型
{
case 'c'://字符
{
char c = va_arg(arg, char);
putchar(c);
break;
}
case 'd'://整型
{
int data = va_arg(arg, int);
PutInt(data);
break;
}
case 's'://字符串
{
//这里不用puts是因为puts后面会自动加\n
char *s = va_arg(arg, char*);
while (*s)
{
putchar(*s);
s++;
}
break;
}
default:
break;
}
}
else//如果不是按照原样输出
{
putchar(*start);
}
start++;
}
va_end(arg);
return 0;
}
void test()
{
my_printf("hello %s%c %d\n","worl", 'd', 1234);
}
int main()
{
test();
system("pause");
return 0;
}