c语言 使用可变参数列表实现printf(my_printf)

//使用可变参数列表实现print("s\t c\n","bit-tech",‘w‘);

#include<stdio.h>
#include<stdarg.h>

void int_to_char(int num)
{
	if ((num / 10) > 0)
		int_to_char(num / 10);
	putchar(num %10+ 48);
}

void my_print(char p[],...)
{
	char *str1 = p;
	int num = 0;
	char *pVal;
	va_list str;
	va_start(str,p);
	while (*str1)
	{
		if (*str1 == ‘%‘&&*(str1 + 1) != ‘\0‘)
		{
			str1++;
			if (*str1 == ‘d‘)
			{
				num = va_arg(str, int);
				int_to_char(num);
			}
			if (*str1 == ‘s‘)
			{
				pVal= (char *)va_arg(str, char *);
				while (*pVal)
				{
					putchar(*pVal);
					pVal++;
				}

			}
			if (*str1 == ‘c‘)
			{
				putchar(va_arg(str, char));
			}
		}
		else if(*str1 == ‘\n‘)
		{
			putchar(‘\n‘);
		}
		else if (*str1 == ‘\t‘)
		{
			putchar(‘\t‘);
		}
		else
			putchar(*str1);
		str1++;
	}
	va_end(str);
}

int main()
{
	int a=1010;
	char b[20]="我是帅哥!";
	char c = ‘#‘;
	my_print("你\n%c是猪\n%d\n哈哈\n%s\n\t<-tab\n",c ,a,b);
	return 0;
}
时间: 2024-10-26 18:42:00

c语言 使用可变参数列表实现printf(my_printf)的相关文章

【C语言】用可变参数列表实现printf函数

//用可变参数列表实现printf函数 #include <stdio.h> #include <stdarg.h> void my_printf(const char *str,...) { va_list fun; va_start (fun,str); while(*str!=0) { if(*str=='c') { putchar(va_arg(fun,char )); } if(*str=='s') { puts(va_arg(fun,char *)); } str++;

C语言函数可变参数列表

C语言允许使用可变参数列表,我们常用的printf函数即为可变参数函数,C标准库提供了stdarg.h为我们提供了这方面支持:该头文件提供了一些类型和宏来支持可变参数列表,包括类型va_list,宏va_start.va_arg.va_end: 可变函数参数定义方法: #include <stdarg.h> void func(int count,...){ va_list ap; int ix, tmp; va_start(ap, a); for(ix=0;ix < count; ++

【C语言】可变参数列表。

(1)先看一个求平均值的函数 #include <stdio.h> double average(int val,int v1,int v2,int v3,int v4,int v5) { double sum = v1; if(val >= 2) sum += v2; if(val >= 3) sum += v3; if(val >= 4) sum += v4; if(val >= 5) sum += v5; return sum/val; } int main ()

(C语言)可变参数列表

C函数要在程序中用到以下这些宏: void va_start( va_list arg_ptr, prev_param ); type va_arg( va_list arg_ptr, type ); void va_end( va_list arg_ptr ); va_list:用来保存宏va_start.va_arg和va_end所需信息的一种类型.为了访问变长参数列表中的参数,必须声明 va_list类型的一个对象       定义: typedef char *  va_list; va

可变参数列表实现printf函数

模拟实现printf函数,可以在屏幕上输出my_printf("sccccc\n","hello",'w','o','r','l','d'); #include<stdio.h> #include<stdlib.h> #include<stdarg.h> int my_printf(char *word, ...) { va_list arg; va_start(arg, word); while (*word) { switch

可变参数列表的实现--平均值

<pre name="code" class="cpp"><span style="font-size:24px;">c语言中用可变参数列表的原因</span> <span style="font-size:18px;">cpp文件中参数可以初始化,则实参中用几个参数写几个,但是c中形参不可以初始化,所以引出可变参数列表,头文件为stdarg.h,使用宏stdarg va_lis

【C语言】printf函数的简单实现(可变参数列表)

stdarg宏: 可变参数列表是通过宏来实现的,这些宏定义于stdarg.h头文件中,它是标准库的一部分.这个头文件声明一个类型va_list和三个宏va_start.va_arg和va_end.我们可以声明一个类型为va_list的变量,与这几个宏配合使用,访问参数. 声明一个va_list类型的变量arg,它用于访问参数列表的未确定部分.这个变量是调用va_start来初始化的.它的第一个参数是va_list的变量名,第2个参数是省略号前最后一个有名字的参数.初始化过程把var_arg变量设

c语言中对可变参数列表的简单理解

函数原型中一般情况下参数的数目是固定的,但是如果想在不同的时候接收不定数目的参数时该怎么办呢?c语言提供了可变参数列表来实现. 可变参数列表是通过宏来实现的,这些宏定义在stdarg.h的头文件中.头文件中声明了一个va_list类型和va_start.va_arg.va_end三个宏.我们使用可变参数列表的时候需要声明一个va_list类型的变量配合这三个宏使用. va_start(va_list变量名,省略号前面最后一个有名字的参数):在提取可变参数前必须调用这个宏实现初始化. va_arg

【C语言】求多个数中的最大值(可变参数列表)

求多个数中的最大值要求用可变参数列表: 代码如下: <span style="font-size:18px;">#include<stdio.h> #include<stdarg.h> int Max(int n,...) { int i=0; int max=0; va_list arg; va_start(arg,n); for(i=0;i<n;i++) { int val=va_arg(arg,int); if (val>max)