用可变参数列表实现printf函数
要实现printf函数,我们首先应该获取printf函数中由双引号中的字符串,若遇到不是%的字符,我们应该直接将其输出,若遇到%,我们应该判断它后面是什么字符,这里先只考虑%c,%s的情况,如果是%c那么我们应该将读到的字符输出来,若为%s,应该将读到的字符串通过指针解引用的方式依次输出,如果是%d%f我们暂且将它当做普通字符输出。
实现的代码如下:
#include<stdlib.h>
#include<stdarg.h>
void my_printf(char *str,...)
{
va_list arg;
va_start(arg, str);
int ch = 0;
char *pstr = NULL;
while (*str)
{
if (*str == '%')
{
str++;
switch (*str)
{
case 'c':
{
ch = va_arg(arg, char);
putchar(ch);
break;
}
case 's':
{
pstr = va_arg(arg, char*);
while (*pstr)
{
putchar(*pstr);
pstr++;
}
break;
}
default:
putchar(*(str - 1));
putchar(*str);
}
str++;
}
else
{
putchar(*str);
str++;
}
}
va_end(arg);
}
int main()
{
my_printf("%s %c%c%c\n", "hello", 'b', 'i', 't');
my_printf("%d%f %c%c %f %s\n", 'a', 'b', "hello");
system("pause");
return 0;
}