在最初接触C语言的时候就接触到 printf( ) 这个函数,当时并没有对此留心与研究,也没有发现这个函数跟其他普通函数存在区别,普通函数的参数在函数定义的时候就确定了,而 printf ( ) 函数的参数列表在调用时可以变化。所以再学习与了解可变参数列表以后,便利用可变参数列表实现了一个简易的 printf( ) 。
其代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
void printf_int(int n)//看似打印的是数字, 其实是一个个字符
{
if (n > 9)
{
printf_int(n / 10);//利用递归的思路来将一个数字各个位数分离开来。
}
putchar((n % 10) + '0');//利用 '0' 加上数字所代表的字符代替想要打印的数字。
}
int my_printf(const char *format, ...)//printf函数的返回值其实是在屏幕上所打印东西的个数,所以返回值是 int。
{
va_list list;
va_start(list, format);
char *p = format;
while (*p != '\0')
{
if (*p == '%')
{
p++;
switch (*p)
{
case 'd'://%d,即为整型
{
int data = va_arg(list, int);
printf_int(data);//在打印整型数字时,发现并没有好的方法能对数字打印,于是便写了个打印数字的函数。
}
break;
case 'c'://%c,即为字符类型
{
char ch = va_arg(list, char);
putchar(ch);
}
break;
case 's'://%s,字符串
{
char *cp = va_arg(list, char*);
while (*cp)
{
putchar(*cp);
cp++;
}
}
break;
default:
break;
}
}
else
putchar(*p);
p++;
}
va_end(list);
}
int main()
{
int a = 10;
char ch = 'a';
char *str = "hello china!";
printf("printf result is : %d %c %s\n", a, ch, str);//这里的printf作为比较,与自己实现的进行对比。
my_printf("my_printf result is : %d %c %s\n", a, ch, str);
system("pause");
return 0;
}
运行结果显示与printf的一致,简易的 printf( ) 函数就此实现,由于是简易的实现,所以仅仅只对 %d、%c、%s 进行了实现。
欢迎大家共同探讨研究,如果错误,请及时联系作者进行修改更正,谢谢大家!