一.printf功能:
printf函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。
printf原型:int printf( const char* format , [argument] … );
我们可以利用可变参数列表模拟实现printf
二.printf函数分析:
printf函数的参数是不确定的,传参的地方必须使用其他东西
我们可以利用stdarg宏来解决可变参数问题
头文件:<stdarg.h>
va_list;
type va_arg( va_list arg_ptr, type );
void va_end( va_list arg_ptr );
void va_start( va_list arg_ptr, prev_param );
三.代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
#include<assert.h>
#pragma warning(disable:4996)
void myprintf(const char*format, ...)
{
assert(format);
va_list arg;
va_start(arg,format);
while (*format)
{
if (*format == '%')
{
format++;
switch (*format)
{
case's':
{
char*s = va_arg(arg, char*);
puts(s);
}
break;
case'd':
{
int q = va_arg(arg, int);//此处返回整型
putchar(q + '0');
}
break;
case'c':
{
char c = va_arg(arg,char);
putchar(c);
}
break;
case'f':
{
float f = va_arg(arg,char);
}
break;
case'%':
{
putchar('%');
}
break;
default:
puts("format error!\n");
break;
}
}
else if (*format == '\\')
{
format++;
if (*format == 'n')
{
puts("");
}
}
else
{
putchar(*format);
}
format++;
}
va_end(arg);
}
int main()
{
char c = 'c';
char *s = "hello world";
myprintf("hello %c, hello %s\n", c , s);
system("pause");
return 0;
}