题目:
模拟实现printf函数,可完成下面的功能能完成下面函数的调用。
print(“s ccc d.\n”,”hello”,’b’,’i’,’t’,100);
函数原型:
print(char *format, …)
分析:
要实现printf函数,我们首先应该获取printf函数中由双引号中的字符串,若遇到不是%的字符,我们应该直接将其输出,若遇到%,我们应该判断它后面是什么字符,如果是%c那我们需要将读到的字符输出来,若为%s我们将读到的字符串通过指针的方式依次输出
如果是%d,我们将它转换为字符输出。
代码如下
#include<stdio.h>
#include<stdlib.h>
#include<stdarg.h>
void guiitoa(int num) //递归将整型123,输出为字符型123
{
if(num/10==0)
putchar(num%10+'0');
else
{
guiitoa(num/10);
putchar(num%10+'0');
}
}
void print(const char *format,...)
{
int i = 0;
va_list arg; //定义char* 变量arg
va_start(arg,format); //为arg进行初始化
for(i = 0;format[i]!='\0';i++)
{
if(format[i]!='%')
{
putchar(format[i]);
}
else
{
i++;
switch(format[i])
{
case 'c':
putchar(va_arg(arg,int));//取下一个参数的字符,并打印
break;
case 'd':
{
int r = va_arg(arg,int);
guiitoa(r);
}
break;
case 's':
{
char *r = va_arg(arg,char*);//取下一个参数的地址,因为这个是字符串
int i =0;
for(i = 0;r[i]!='\0';i++) //逐一输出
putchar(r[i]);
}
break;
/*case '%':
putchar("%");
break;*/
}
}
}
}
int main()
{
print("%s %c %c %c %d","hello",'b','i','t',100);
system("pause");
return 0;
}
运行结果