1.题目
模拟实现printf函数,可完成下面的功能:
能完成下面函数的调用
print(“s ccc d.\n”,”hello”,’b’,’i’,’t’,100);
函数原型:
print(char *format, …)
2.程序代码
#define _CRT_SECURE_NO_WARNIGS 1
#include <stdio.h>
#include <Windows.h>
#include <stdarg.h>
void print_d(int num)//使用递归函数,以字符形式输出数字
{
if (num < 10)
{
putchar(num + '0');
}
else
{
print_d(num / 10);
putchar(num % 10 + '0');//数字+'\0'输出为该数字的字符形式,例如9+'\0'='9'
}
}
void print(char *format, ...)
{
va_list arg;
va_start(arg, format);
char *i = NULL;
int ret = 0;
while (*format)
{
switch (*format)
{
case 'c'://若是字符,直接输出
putchar(va_arg(arg, char));
format++;
break;
case 's'://若为字符串则依次输出
i = va_arg(arg, char*);
while (*i)
{
putchar(*i);
i++;
}
format++;
break;
case 'd':
ret = va_arg(arg, int);
print_d(ret);
format++;
break;
default://若为其他,则直接输出
putchar(*format);
format++;
break;
}
}
va_end(arg);
}
int main()
{
print("s ccc d.\n", "hello", 'b', 'i', 't', 100);
//print("s", "hello");
//print("ccc d d d.\n", 'b', 'i', 't', 100, 200, 300);
//上面两行代码是调试程序时用的
system("pause");
return 0;
}