qq_41889292的博客

C语言学习心得

模拟printf()函数,并实现%d,%c,%s的打印

解题思路:在模拟实现printf()函数时我们将会面临两个问题:一共有多少个参数,每个参数的类型。在C语言中printf的返回类型为整形。我们可以通过%来确定有多少个参数,%后的字符来确定类型。

#include<stdio.h>
#include<windows.h>
#include<assert.h>
is_print(int n){
	while (n>0){
		is_print(n /10);
		putchar(n % 10 + '0');
	}
}
int my_printf(const char*format,...)
{
	assert(format);
	va_list arg;				//函数声明了一个arg的变量,它用于访问参数列表的未确定部分,这个变量通过下面的va_start来初始化 
	va_start(arg, format);	                // a_start的第一个参数是va_list变量的名字,第二个参数是省略号前最后一个有名字的参数,
	char *p = format;
	while (*p){
		if (*p == '%')
			p++;
		else putchar(*p);
		p++;
	}
	switch (*p){
	    case 'd': is_print(va_arg(arg, int));break;
	    case 's':{
			 char *start = va_arg(arg, char*);    //va_arg用来访问参数,这个宏接受两个参数:va_list变量和参数列表中下一个参数的类型,  
			    while (*start){					  	//va_arg返回这个参数的值,并使arg指向下一个可变参数
				 putchar(*start);
				 start++;
				 }
		}; break;
		case 'c':putchar(va_arg(arg, char)); break;
		default: break;
	}
	return format;
	va_end(arg);
}
int main(){
	my_printf("w\n");
	my_printf("1235\n");
	my_printf("abcdef\n");
	system("pause");
	return 0;
}

运行结果:


阅读更多
个人分类: C语言
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

模拟printf()函数,并实现%d,%c,%s的打印

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭